- 集合主要分为两组,单列集合(Collection )和双列集合(Map)
- Collection 接口有两个重要的子接口 List Set , 他们的实现子类都是单列集合
- Map 接口的实现子类 是双列集合,存放的 K-V
-
List 是有序的,set是无序的
image.png image.png
一、List
1.ArrayList: 有序、非线程安全、值可以为null、值可以重复,底层实现Object数组,它实现了Serializable接口,因此它支持序列化;优点:查询快,插入、删除慢;
List list = new ArrayList();
list.add("jack");
list.add(10);
list.remove(0);//删除第一个元素
System.out.println(list.size());//1
System.out.println(list.isEmpty());//判断是否为空
//迭代器遍历方式:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
}
list.iterator();//重置迭代器
//增强for循环
for (Object o : list) {
System.out.println(o);
}
- List集合中是有序的,插入和取出都是有序拿出
- List集合中每个元素都有一个对应整型的顺序索引
- ArrayList是可以插入多个null
- ArrayList是通过数组实现的
2.vector:跟ArrayList结构相似,是线程安全的,加了synchronized
Vector vector = new Vector();
vector.add("1");
vector.add("xxx");
for (Object o : vector) {
System.out.println(o);
}
- linkedList:有序、非线程安全、底层实现是链表,插入、删除快,查询效率不高
LinkedList linkedList = new LinkedList();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
//这里默认删除的是第一个结点
linkedList.remove();
//修改某个结点对象
linkedList.set(1, 999);
如果改查的操作多,选择ArrayList,增删的操作多选择LinkedList
二、set
HashSet:
- 无序
- 不允许重复元素
final HashSet<Object> objects = new HashSet<>();
objects.add(1);
objects.add(2);
for (Object object : objects) {
System.out.println(object);
}
- HashSet实际上是HashMap
- Hashset实现了set接口
- 可以存放null
LinkedHashSet:
- LinkedHashSet是HashSet的子类
- LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表
LinkedHashSet objects = new LinkedHashSet();
objects.add(1);
objects.add(2);
for (Object object : objects) {
System.out.println(object);
}
三、Map
- map和collection并列存在,是k-value的映射关系
- map中的key不允许重复,添加重复的key会直接替换即修改
- 常用String类作为map的key
- key 和value是一对一的关系
HashMap:
final HashMap hashMap = new HashMap();
hashMap.put("k1", "v1");
hashMap.put("k2", "v2");
hashMap.put("k3", "v3");
//使用keyset遍历数据
final Set set = hashMap.keySet();
for (Object o : set) {
System.out.println(hashMap.get(o));
}
// 使用entrySet遍历数据
Set entrySet = hashMap.entrySet();
for (Object entry : entrySet) {
Map.Entry m = (Map.Entry) entry;
System.out.println(m.getKey() + "-" + m.getValue());
}
- HashMap是map里使用最多的
- HashMap没有实现同步,因此线程是不安全的
Hashtable:
- Hashtable是线程安全的
- Hashtable使用方法和HashMap基本一样
- Hashtable的key和value都不能为null
Properties:
- Properties 继承于 Hashtable。表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
- 它的特点和Hashtable基本一致
- Properties还可以用与从xxx.properties文件,加载Properties类对象,读取数据和修改
四、Collections工具类
- reverse(List)反转list中元素的顺序
- sort(List)根据元素顺序自然排序
- sort(List Comparator)根据Comparator产生的顺序排序
4.swap(List,int,int)元素交换
网友评论