Vector 向量
与ArrayList像,都是由数组实现内部存储结构, 已经被ArrayList代替
Vector线程安全,效率较低,ArrayList线程不安全,效率较高,重效率轻安全
扩容:每次扩容原容量的2倍,没有ArrayList节省空间
LinkedList
就是在存储数据的地方,会有前面和后面的对象地址值也在存储
- 底层:双向链表实现
- 优点:增删效率高
- 缺点:查询效率低
System.out.println(list.getFirst());//获取第一个值
ArrayLis的构造器
- ArrayList() 内部空数组,第一次添加数据时构建10个大小
- ArrayList(int initialCapacity) 创建指定大小的容器,当能够确定数据多少的时候,推荐使用,效率更高,里面直接写容器的数字大小
Set接口: 无序不可重复
List接口: 有序就可重复
都是Collection的子接口,都是存储单个数据值的容器
无序: 存储的顺序和内部真实存放的顺序不同
Map 容器接口
存储的每一个数据都是key-value组成
key 无序的,不可重复–>Set集合
value 无序的,可重复 -->Collection集合
key和value之间存在映射关系,根据key获取value
一个key,只能对应一个value,如果想要对应多个,可以把value存在容器中
如果存储的数据的时候,key相同的数据value会覆盖
Map的遍历方式:
1.keySet() 获取所有的key,返回一个Set集合,然后可以根据key获取value
2.values() 获取所有的value值,返回一个Collection集合
3.entrySet() 返回此映射中包含的映射关系的Set集合
如图:
package Heiko0114;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapDemo0001 {
public static void main(String[] args) {
Map<Integer,String> map=new HashMap();
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
// System.out.println(map.put(3, "王五2"));
// System.out.println(map.remove(2));
System.out.println(map);
System.out.println("-----keySet()-------");
Set<Integer> set=map.keySet();//keySet() 获取所有的key,返回一个Set集合,然后可以根据key获取value
for(Integer i:set){
System.out.println(map.get(i));
}
System.out.println("-----values()-------");
Collection<String> col=map.values();//values() 获取所有的value值,返回一个Collection集合
Iterator<String> it=col.iterator();//是对col这个容器进行迭代器遍历
while(it.hasNext()){
System.out.println(it.next());//迭代器循环打印
}
System.out.println("-----entrySet-------");//重点掌握
Set<Map.Entry<Integer,String>> set2=map.entrySet();//entrySet() 返回此映射中包含的映射关系的Set集合
System.out.println(set2);
//迭代器循环
Iterator<Map.Entry<Integer,String>> it2 = set2.iterator();
while(it2.hasNext()){
Map.Entry<Integer,String> entry=it2.next();
System.out.println(entry.getKey()+"--->"+entry.getValue());
}
}
}
HashMap
底层 : hash表实现(数组+链表+红黑树)