集合相关概念:
1、集合中存储的是对象的引用(内存地址)
2、集合中无法存储基本类型数据(自动装箱)
list:
1、有序可重复,存储的元素有下标
2、有序指:存进去是这个顺序,取出来还是这个顺序
3、有下标指:下标从0开始,以1递增
ArrayList:
1、底层采用数组这种数据结构:Object[] obj
2、是非线程安全的
3、初始化容量10,当集合满了,自动扩容1.5倍
4、优点:检索元素效率高
5、缺点:随机增删元素效率低,但向某尾添加元素,效率很高
LinkedList:
1、底层采用了双向链表数据结构
2、随机增删效率高,检索效率低
Vetor:
1、底层采用了数组这种数据结构
2、线程安全的
3、默认容量10
4、数组满了之后扩容2倍
Set:
1、无序不可重复
2、无序表示存进去是这个顺序,取出来就不一定是这个顺序了
HahSet:
1、HashSet在new的时候,底层实际上new了一个HashMap集合
2、向HashSet集合中存储元素,实际上存储到了HashMap集合中了
3、HashMap底层采用了哈希表数据结构
TreeSet:
1、因为也继承了SortedSet接口,所以集合中的元素除了无序不可重复,而且还可以自动排序
2、底层实际上是TreeMap,new TreeSet的时候,底层实际上new TreeMap集合,
3、往TreeSet集合中存数据时,实际上将数据存到了TreeMap中
4、TreeMap底层采用了二叉树数据结构
Map:
1、key和value都是存储Java对象的内存地址
2、key特点:与Set特点相同,元素无序不可重复
HashMap:
1、底层是哈希表
2、非线程安全
3、初始化容量16,扩容2倍
4、默认扩容因子0.75
5、当单项链表元素达到8个时,会转化为红黑树,当小于等于6个时,又会转化为单向链表
Hashtable:
1、底层是哈希表
2、线程安全
Properties:
1、Hashtable的子类
2、一般用来存储属性
3、key,value都只能存储String类型
TreeMap:
1、底层数据结构是二叉树
2、集合key部分的元素会自动排序
集合常用方法:
Collection:
Collection collection = new ArrayList();
1、向集合中添加元素:
collection.add("a");
2、获取集合中元素的个数:
collection.size();
3、清空集合中的元素
collection.clear();
4、判断集合中是否包含特点的元素
boolean contains = collection.contains("a");
5、删除集合中特定元素
collection.remove("a");
6、判断集合是否为空
collection.isEmpty();
7、将集合转换成数组
collection.toArray();
8、获取集合的迭代器对象
Iterator iterator = collection.iterator();
9、使用Iterator遍历Collection集合
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
集合安全问题:
将ArrayList转换成线程安全的(HashMap也可以这样转换)
//线程不安全
List list = new ArrayList();
// 转换成线程安全的
Collections.synchronizedList(list);
list.add(1);
list.add(2);
list.add(3);