写作时间:2019-10-10
实现目标:总结Java集合概念,攻克集合难点
涉及知识:Java集合

【思维导图】





【Java集合划分】

【Java集合简介】

Java集合是java提供的一个工具包,全部继承自`java.util.*`。主要包括两大接口`Collection`接口和`Map`接口以及相关的工具类(`Iterator`迭代器接口、`Enumeration`枚举类、`Arrays`和`Colletions`)

Collection是一个接口,包含List列表和Set集合。其中List是有序的队列,元素值可以重复,索引从0开始,实现类有LinkedList,ArrayList,Vector;而Set是一个不允许有重复元素的集合,Set的实现类有HashSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。
Map是一个映射接口,通过key-value键值对实现。实现类有HashMap,TreeMap,WeakHashMap,Hashtable。
Iterator是遍历集合的工具,Enumeration也是遍历集合,但它的的功能要比Iterator少,只能在Hashtable, Vector, Stack中使用。
Arrays和`Collections是操作数组、集合的两个工具类。

【Collection接口】

【List集合】

List继承了Collection,是有序的列表。

实现类有ArrayList、LinkedList、Vector、Stack等

ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!

LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!

Vector是基于数组实现的,是一个矢量队列,是线程安全的!

Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)!

【List特点】

有序可重复

存储不同类型的元素

长度可变

【ArrayList(动态数组) 特点】

有序可以重复

类型可以不相同(建议相同,使用泛型)

长度可变

内存地址是连续的

查找效率很高

增删效率较低

【LinkedList(链表)】

 有序可以重复

 类型可以不相同(建议相同,使用泛型)

 长度可变

 内存地址不是连续的

 修改元素效率高(添加、修改、删除)

【ArrayList与LinkedList区别】

ArrayList底层是数组,LinkedList底层是链表

ArrayList元素存储地址是连续的,遍历比较快,0操作元素比较慢LinkedList元素存储地址是相互指向的,遍历比较慢,操作元素比较快

【List遍历方式】

//下标遍历
for(int i = 0;i<list.size();i++){
    System.out.println(list.get(i));
}
//forEach遍历
for(String value:list){
    System.out.println(value);
}
//迭代器遍历
Iterator it1 = list.iterator();
while(it1.hasNext()){
    System.out.println(it1.next());
}

【Set集合】

Set的两个实现类,HashSet和TreeSet

HashSet实现本质其实就是HashMap,HashSet里面的元素是无序的。

TreeSet实现本质其实就是TreeSet,TreeSet里面的元素是有序的。

【HashSet特点】

 元素是无序

 元素不可以重复

 没有下标

【TreeSet特点】

元素是有序,按自然元素排序
元素不可以重复
没有下标

【LinkedHashSet】

元素是有序,按插入顺序迭代
元素不可以重复
没有下标

【Set集合去重原理】

Set集合只针对引用类型进行去重,引用类型必须重写hashCode与equals两个方法,不然不能去重

遍历与List相似

【Map集合】

在Java中java.util.Map表示一个Map,Map是以键值对的方式存储数据,
一个key对应一个value,key是唯一的不可以重复,value可以重复,也是数据结构的一种

【HashMap的简介】

HashMap是基于哈希表的Map实现的的,一个Key对应一个Value,允许使用null键和null值,不保证映射的顺序,特别是它不保证该顺序恒久不变!也不是同步的

【HashMap的特点】

HashMap是通过哈希表来存储一个key-value的键值对,每个key对应一个value,允许key和value为null! hash

HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。HashMap的容量不足的时候,可以自动扩容resize(),但是最大容量为MAXIMUM_CAPACITY==2^30!

put和get都是分为null和非null进行判断!

resize非常耗时的操作,因此,我们在用HashMap的时,最好能提前预估下HashMap中元素的个数,这样有助于提高HashMap的性能。

求hash值和索引值的方法,这两个方法便是HashMap设计的最为核心的部分,二者结合能保证哈希表中的元素尽可能均匀地散列。

【Map的遍历方式】

//使用keySet()方法遍历
for (String key : map.keySet()) {
    System.out.println(key + " : " + map.get(key));
}
//使用map的entrySet()方法遍历
for (Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}
//iterator迭代器遍历keySet
Iterator<String> it = map.keySet().iterator();
while(it1.hasNext()) {
    String key = it1.next();
    System.out.println(key + " : " + map.get(key));
}
//iterator迭代器遍历entrySet
Iterator<Entry<String, String>> it =    map.entrySet().iterator();
while(it3.hasNext()) {
    Entry<String, String> entry = it3.next();
    System.out.println(entry.getKey() + " : " +     entry.getValue());
}

【未完待续……】

您的喜欢是作者写作最大的动力!❤️
  • PayPal
  • AliPay
  • WeChatPay
  • QQPay
YAN