java-清楚明了的集合

集合基础

  • java集合都在java.util里
  • Java的集合类由Collection接口和Map接口派生

集合类和数组的不同

数组元素可以为基本数据类型值/对象引用;
集合元素只能为对象引用;
线程安全用红色标出


Conllection存放单值的最大接口

java-清楚明了的集合

1.<<interface>> Set 需要唯一

无序集合,可以去重

  • 重复通过hashCode()和equals()判断

SortedSet <<interface>>
|-----TreeSet 需要指定顺序

	实现Comparable接口实现排序

HashSet 不需要指定顺序

	散列的方式存放(需要去重需要覆写hashcode()和equals()方法)

LinkedHashSet 与存储顺序一致

2.<<interface>> List 不需要唯一

有序集合(顺序保存),可重复

ArrayList[查找快,数组实现]

     初始值为10
     ArrayList每次扩容的容量是当前的1.5倍

Vector[线程安全,过时]

	性能低,同步,安全
	由于Vector中的方法基本都是synchronized的,其性能低于ArrayList
	Vector可以定义数组长度扩容的因子,ArrayList不能

丨------stack[线程安全,栈,先进后出]

LinkedList[增删快,链表实现]

	基于双向链表,可以在开头添加,可以在结尾添加
	遍历LinkedList时应用iterator方式,不要用get(int)方式,否则效率会很低

3.<<interface>> Queue

先进先出


Map接口

java-清楚明了的集合

存储键值对

1.Hashtable注意table

	线程安全,性能低
	Hashtable不能将键和值设为null
	[总体加锁]Hashtable 在进行读写操作时会锁住整个Entry数组,这就导
	致数据越多性能越差。
	ConCurrentHashMap对桶数组进行分段加锁,不允许空值

2.HashMap

	异步处理,非线程安全,性能高
	初始化为16(数组),扩容因子为0.75
	HashMap能够将键设为null,也可以将值设为null
	HashMap有快速寻址的特点
	HashMap不能保证元素的顺序
//输出key 和 value
System.out.println("第一种:通过Map.keySet遍历key和value:");
for (Integer in : map.keySet()) {
	//map.keySet()返回的是所有key的值
	String str = map.get(in);//得到每个key多对用value的值
	System.out.println(in + "     " + str);
}

// 推荐,尤其是容量大时
//通过Map.entrySet遍历key和value");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
//Map.Entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
//entry.setValue();
//map.entrySet()  返回此映射中包含的映射关系的 Set视图。
	System.out.println("key= " + entry.getKey() 
				+ " and value= "+ entry.getValue());
}

丨------ConcurrentHashMap

	是HashMap的线程安全版(自JDK1.5引入),提供比Hashtable更高效的并发性能。
原理:
	ConcurrentHashMap使用分离锁的思路解决并发性能,其将 Entry数组拆
	分至16个Segment中,以哈希算法决定Entry应该存储在哪个Segment。
	这样就可以实现在写操作时只对一个Segment 加锁,大幅提升了并发写的性能。
	在进行读操作时,ConcurrentHashMap在绝大部分情况下都不需要加锁,其Entry
	中的value是volatile的,这保证了value被修改时的线程可见性,无需加锁便能实现
	线程安全的读操作。
它不能保证读操作的绝对一致性。

丨------WeakHashMap

3.LinkedHashMap

LinkedHashMap与HashMap非常类似,唯一的不同在于前者
的Entry在HashMap.Entry的基础上增加了到前一个插入和后一个插
入的Entry的引用,以实现能够按Entry的插入顺序进行遍历。

java-清楚明了的集合

4.TreeMap

TreeMap是基于红黑树实现的Map结构,其Entry类拥有到左/右叶子节点和父节点的引用,同时还记录了自己的颜色

参考链接

https://blog.****.net/sdgihshdv/article/details/72566485