从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

java集合

 

        

 

 

   集合类在 java.util包下    支持多线程的集合在 java.util.concurrent 下

 

  List:有序、可重复,可通过索引访问

  Set:无序、不可重复集合

  Queue:队列集合

  Map:key-value集合

 

 

 Collection接口常用方法

  

 

 

1. List

  有序、可重复

  默认按元素添加顺序设置元素索引

(1)ArrayList

  动态数组,可插入任何符合规则的元素(null都可以)

  创建对象时,该对象有初始容量,当快不够存储新的元素时,就扩容,每次增长 0.5 倍

  ArrayList不是同步的,多线程下需要加入同步操作

  循环优先使用普通for循环,其次foreach   

   

 

(2)LinkedList

  内部用双向链表组织元素

  循环优先使用 iterator遍历

 

(3)Vector

  类似ArrayList,但Vector是同步的。扩容时每次增长1 倍。

 

(4)Stack

  push()

  pop()

  peek() 获取栈顶元素

  empty()

  search()  元素在栈中位置

 

(5)迭代器

  Iterator接口:

    boolean hasNext()  判断集合里是否还存在下一个元素

    Object next()   返回集合里下一个元素

    void remove()   删除集合里上一次next方法返回的元素

  ListIterator接口继承自Iterator接口:

    boolean hasPrevious()  集合里是否存在上一个元素

    Object previous()     返回集合里上一个元素

    void add(Object o)   在指定位置插入一个元素

 

2. Queue

 

3. Set

  无序、不可重复集合

(1)HashSet

  基于hash算法存储元素---存取元素快

  非线程同步

  集合元素值可为null

  添加元素时如果两个不同的值计算出了相同的hash code,则将这两个元素以链式结构保存在同一位置

(2)LinkedHashSet

  非线程同步

  基于HashSet,但使用链表维护元素【元素序基于添加顺序】

(3)TreeSet

  使用红黑树存储元素,因此有序

  非线程同步

  排序:

    ①自然排序:对于自定义类需要实现Comparable接口以明确比较方法

    ②定制排序:要实现Comparator接口

(4)EnumSet

  枚举类集合类

  不允许null值

  基于Enum类内的定义顺序决定集合元素顺序

 

  HashSet添加、查询元素快,但是无序

  LinkedHashSet基于链表,插入和删除比HashSet慢,但遍历更快

  TreeSet基于红黑树,有序

 

 

 

---------------------------------------------------------------------------------------------

Map

  Map常用方法:

  

 

 

(1)HahsMap、HashTable

  HashMap非线程同步  HashTable是线程同步的(最好使用ConcurrentHashMap来保证线程安全)

  HashMap可用null作为key或value  HashTable不允许

  容量:HashMap默认使用2的幂次方作为哈希表的大小

  底层结构:

    ①HashMap在jdk1.8之前用 数组+链表 实现的散列表实现(hash相同时,就将数据放在同一条链表上)。JDK1.8之后,在链表长度大于阈值(默认8)时,将链表转化为红黑树,减少搜索时间  

 

(2)LinkedHashMap

  采用双向链表维护key-value键值对的次序(与插入顺序一致)

  访问元素时较快

(3)Properties

  HashTable的子类,key和value都是String类型,常用来读取配置文件

(4)TreeMap

  SortedMap的实现类,基于红黑树,对key排序

  ①自然排序:Comparable接口指定排序方法

  ②定制排序:传入Comparator对象,由此对象对key排序

 

Map的遍历:

(1)

for(String key:map.keySet()) {
    String val = map.get(key);
}

(2)

Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
while(it.hasNext()) {
    Map.Entry<String,String> entry = it.next();
    String key = entry.getKey();
    String val = entry.getValue();
}

(3)

for(Map.Entry<String,String> entry:map.entrySet()) {
    String key = entry.getKey();
    String val = entry.getValue();
}

 

 

 

 ----------------------------------------------------------------------------------------------------------------------------------------------

迭代器

1.  迭代器遍历集合时,不能用集合的方法添加、删除元素

 

posted @ 2020-05-07 14:01  T,X  阅读(182)  评论(0编辑  收藏  举报