数组:原生的数组是固定的,删除元素不方便,长度是固定的,容量不够时还需要自己扩容。
而在现实中,数据是不断变化的,因此需要集合。
1.List接口及实现类
单列集合Collection接口下有ArrayList,LinkedList,Vector(线程安全的)。
ArrayList<E> arrayList = new ArrayList<>(); //E是指引用或包装类型
arrayList.add(E e);//将指定元素e增加到此列表末尾
arrayList.remove(2);//删除下标为2的元素
arrayList.remove(Object o);//删除指定元素的第一次出现
arraylist.clear();//清除所有元素
arrayList.contains();//判断是否包含子串
arrayList.ensureCapacity(int minCapacity);//增加容量
arrayList.get();//返回指定位置的元素
arrayList.indexOf();//返回指定元素首次出现的索引,从前往后找
arrayList.lastIndexOf();//返回指定元素首次出现的索引,从后往前找
arrayList.set(int index, E element);//用指定元素替换指定位置的元素
arrayList.isEmpty();//判断集合是否为空
2.List接口集合迭代
(1)for循环遍历,要注意元素下标的改变适当调整
(2)增强for循环遍历(不能对元素进行修改)
for(E i: arrayList){
System.out.println(i);
}
(3)迭代器遍历
Iterator<String> iterator = arrayList.iterator();
while(iterator.hasNext()){ // 判断有没有下一个元素
String item = iterator.next(); // 取出元素
if(item.equals("c")){
iterator.remove(); //使用迭代器方法删除元素
}
}
(4)ArrayList和LinkedList区别
LinkedList:查询慢,但在列表开头,中间,和末尾位置添加和删除元素效率更高
ArrayList: 中间添加删除慢,但是在列表末尾添加删除元素,需要频繁访问一个元素,效率高(5)List中有顺序且可以重复,Set中没有顺序且不可以重复。
接口下可以重复的有ArrayList,LinkedList,不可以重复的有HashSet,TreeSet
3.Set接口
Set接口继承了Collection接口
(1)Set中存储的元素是不可以重复的,也无序
(2)Set接口有俩个实现类 HashSet和TreeSet
HashSet:底层是哈希表+链表
TreeSet:如果需要进行排序,存储的对象必须实现Comparable接口
4.Set遍历方式
(1)增强for循环(2)迭代器遍历
5.Map
Map是一个散列表,它的存储方式是键值对(key-value)映射。
HashMap中的key不能重复,排列顺序不固定,可以存储一个为null的键
TreeMap中元素有顺序,但是key值必须实现Comparable接口
HashTable 不能存储为null的键
(1)Map接口常用方法
import java.util.HashMap; // 首先引入 HashMap 类
HashMap<Integer,String> hashMap = new HashMap<>();
hashMap.put(1,"Hello");//添加键值对
hashMap.remove(key);//删除键值对 key为键
hashMap.size();//计算元素的数量
hashMap.contains(key);//判断是否存在指定的key对应的映射关系
hashMap.contains(value);//判断是否存在指定的值对应的映射关系
hashMap.get(key);//获取key对应的value
hashMap.isEmpty();//判断是否为空
(2)遍历
Set<String> keySet = map.keySet();
//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : keySet) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}
//推荐
System.out.println("通过Map.entrySet遍历key和value");
Set<Map.Entry<String, String>> entries = map.entrySet();
for(Map.Entry<String, String> entry:entries){
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第三种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
6.Collection
Collection 接口 是单列集合的顶级接口,与数组Arrays类似,Collections提供了对集和排序、遍历等多种算法的实现