在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java常见集合的归纳总结

2016-12-20 13:13| 发布者: zhangjf| 查看: 472| 评论: 0

摘要: Java常见集合的归纳总结 首先来看看集合的关系: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap 一、Collection接口中定义的方 ...

Java常见集合的归纳总结



首先来看看集合的关系:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap


一、Collection接口中定义的方法

int size():获取当前集合中的元素数量


boolean isEmpty():查看当前集合中是否包含元素

不包含返回true

检查当前集合是否为空集


boolean contains(Object o):

查看当前集合中是否包含给定的元素


void clear():清空集合


boolean add(E e):向集合中添加元素

当元素成功添加到集合中返回true


boolean remove(Object o):从集合中删除给定的元素


boolean addAll(Collection c):

将给定集合中的所有元素添加到当前集合


boolean removeAll(Collection c):

删除当前集合中与给定集合中相同的元素


Iterator iterator():

获取迭代

二、List接口

1)ArrayList

1.ArrayList集合是有序的,可重复的集合,可以根据下表来取元素(下表从0开始)

2.常用方法有:

add() 增加元素

set() 修改元素的值

remove() 删除元素

indexOf() 第一个对应元素的下标

lastIndexOf() 最后一个对应元素的下标

subList(int a,int b) 取子集(操作子集会影响原集合) 下标前包含后不包含[a,b) List中的独有方法

toArray() 集合转化成数组(Arrays.toString(array)是显示该数组的方法)

2.遍历集合的统一方式:

  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. /**
  5. * 遍历集合的统一方式
  6. * 迭代器模式
  7. * @author admin
  8. *
  9. */
  10. public class IteratorDemo {
  11. public static void main(String[] args) {
  12. Collection c = new ArrayList();
  13. c.add("one");
  14. c.add("two");
  15. c.add("three");
  16. //java.util.Iterator
  17. /*
  18. * Iterator不能实例化(接口)
  19. * 不同的集合提供了可以遍历自身元素的迭代器实现
  20. */
  21. Iterator it = c.iterator();
  22. /*
  23. * 使用迭代器遍历集合的步骤
  24. * 问取删
  25. * 删不是必须的操作
  26. */
  27. //问问集合是否还有元素可以遍历
  28. while(it.hasNext()){
  29. //取出这个元素
  30. Object element = it.next();
  31. //每次调用next()方法前都应先确保hasNext()为true
  32. // element = it.next();
  33. System.out.println(element);
  34. }
  35. }
  36. }
复制代码


2)LinkedList

1.Queue接口定义了队列存取元素的基本方法,基于LinkedList的实现原理,它非常适合队列的特性。

队列,遵循先进先出原则.

1>.Queue常用方法

offer() 向队列末尾追加新元素

poll() 获取队首元素,获取后该元素就从队列中被删除

peek() 获取队首元素,但不从队列中删除


2.Deque 双端队列,两端都可以进出队但当我们约束从队列的一端进出队时,就形成了另一种存取模式

先进后出原则,这就是栈结构

1>.Deue常用方法

push() 压入元素

pop() “弹出"栈顶元素(注意,当栈中没有元素的时候pop方法会引发异常)


三、Map接口

Map中的key不允许重复。

1)HashMap 一个多行两列的表格存储元素以 key-value对的形式,散列算法实现的Map。

1>常用方法:

put() 存放元素

toString() HashMap重写了toString(),格式为{key1=value1,key2=value2,....}

get(key) 取对应key值的元素的值

boolean containsKey(Object k) 查看当前Map中是否包含给定的key

boolean containsValue(Object v) 查看当前Map中是否包含给定的value


4>HashMap的遍历


  1. public class IterateMapDemo {
  2. public static void main(String[] args) {
  3. Map<Integer,String> map
  4. = new HashMap<Integer,String>();
  5. map.put(1, "一");
  6. map.put(2, "二");
  7. map.put(3, "三");
  8. map.put(4, "四");
  9. map.put(5, "五");
  10. /*
  11. * 获取Map中所有的key
  12. * Set keySet()
  13. * 获取一个Set集合,该集合中存放当前Map中的所有key
  14. */
  15. Set<Integer> keys = map.keySet();
  16. for(Integer key : keys){
  17. System.out.println("key:"+ key);
  18. }
  19. /*
  20. * 遍历每组键值对
  21. * Map中每组键值对,使用一个Entry实例保存的
  22. * Set entrySet()
  23. * 获取一个Set集合,其中每一个元素是一个Entry的
  24. * 实例,而每一个Entry的实例都包含着两个内容
  25. * 分别是key与value
  26. */
  27. //java.util.Map.Entry
  28. Set<Entry<Integer,String>> entrySet
  29. = map.entrySet();
  30. for( Entry<Integer,String> entry : entrySet ){
  31. System.out.println(
  32. "key:" + entry.getKey() + "," +
  33. "value:" + entry.getValue()
  34. );
  35. }
  36. /*
  37. * Collection values()
  38. * 遍历所有的value,这个操作很少用
  39. */
  40. Collection<String> values = map.values();
  41. for(String value : values){
  42. System.out.println("value:" + value);
  43. }
  44. }
复制代码




3>HashMap关于性能的几个名词

Capacity 容量: Hashmap中数组的长度

Initial capacity 初始容量:创建HashMap时,

数组的默认大小,16。


size 大小:HashMap中的元素数量


load factor 加载因子:默认值0.75

是一个比值 size/capacity


每当size/capacity达到加载因子时,数组扩容

并且对原数组中的数据重新进行散列算法并存入

扩容后的数组中


四、Set集合的实现类

1)HashSet

使用散列算法实现的

存放元素的顺序与元素在集合中的顺序不一致 但是元素在不改变的情况下,在集合中的顺序是一致 的

Set集合的不重复的集合。

1>.HashSet常用方法

add() 添加元素

remove() 删除元素

注意:a.一般循环遍历的时候删除Set集合使用用迭代器的remove()方法,不能直接调用 Set.remove(e)否则会报异常.

b:存放元素时是根据元素的hashcode()方法的返回值进行的,所以要保证equals方法 为ture的元素应具有相同的hashcode

c:尽可能不要在元素存入集合后修改该元素的内容防止hashcode值发生变化导致不 能正确访问

1)TreeSet

使用二叉树实现的


五、集合的排序

1)ArrayList排序

使用集合的工具类 Collections.sort(list)方法做自然排序。


2)实现Comparator接口

  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.Comparator;
  4. import java.util.List;
  5. /*
  6. * Comparable接口与Comparator接口
  7. */
  8. public class ComparableDemo {
  9. public static void main(String[] args) {
  10. //实现该类后,子类是可比较的
  11. Comparable c;
  12. /*
  13. * 当我们需要排序的元素自身已经实现了Comparable
  14. * 接口,并且定义好了比较规则,但这种比较规则不能
  15. * 满足我们对于排序的需求是,我们就需要提供一种
  16. * 额外的比较规则,这时候我们就需要使用Comparator
  17. */
  18. List<String> list = new ArrayList<String>();
  19. list.add("Killer");
  20. list.add("adam");
  21. list.add("cark");
  22. list.add("marry");
  23. list.add("Boss");
  24. list.add("Jazz");
  25. list.add("jason");
  26. list.add("mark");
  27. list.add("bill");
  28. System.out.println(list);
  29. Collections.sort(list);
  30. System.out.println(list);
  31. /*
  32. * 不能够满足我们的希求,我们希望字母少的在前
  33. * 字母多的在后
  34. */
  35. MyComparator comparator = new MyComparator();
  36. /*
  37. * 使用Collections的重载sort方法
  38. */
  39. Collections.sort(list, comparator);
  40. System.out.println(list);
  41. }
  42. }
  43. /**
  44. * 为字符串提供额外的比较规则
  45. * @author admin
  46. *
  47. */
  48. class MyComparator implements Comparator<String>{
  49. /**
  50. * 根据字符串的长度进行比较
  51. */
  52. public int compare(String o1, String o2) {
  53. return o2.length() - o1.length();
  54. }
  55. }
复制代码

来自:http://seabiscuit-1992.iteye.com/blog/2174656

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 03:19

Copyright 2015-2025 djqfx

返回顶部