集合
- java集合框架提供了一套性能优良、使用方便的接口和类,它们都位于java.util包中。
- 集合作为容器应该具有增、删、改、查的功能,但是也不一定都具备。
一、ArrayList
- ArrayList实现了数组长度可变,在内存中分配连续的空间。
- contains()、remove()都需要重写equals方法
- ArrayList底层使用数组存储(连续)
ArrayList的优缺点
- 优点:遍历数组和随机访问元素的效率比较高
缺点:添加和删除需要移动大量元素,按照内容查询效率低
public class ArrayListDemo1 { public static void main(String[] args) { List list = new ArrayList(); list.add(new Student("王五", 20)); list.add(new Student("张三", 10)); list.add(new Student("李四", 20)); //根据索引位置添加数据 list.add(0, new Student("李四", 20)); print(list); System.out.println("***************"); //删除元素,但是需要重写equals方法 // list.remove(new Student("张三",10)); //移除列表中的元素 // list.clear(); //是否包含指定的元素 ,需要重写equals方法 // boolean contains = list.contains(new Student("王五",20)); // System.out.println(contains); //将指定索引替换成指定内容 // list.set(1, new Student("赵六",30)); print(list); } private static void print(List list) { for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
二、LinkedList
- contains()、remove()都需要重写equals方法
- LinkedList底层使用链表存储,不连续
LinkedList优缺点
- 优点:插入删除元素时效率比较高
- 缺点:遍历和随机访问元素效率低下
ArrayList和LinkedList的用法差不多,就不进行演示了
三、HashSet
- 重写equals、hashCode方法可以实现自动去重的功能
- contains()、remove()需要重写equals、hashCode方法
- HashSet使用数组+链表实现
HashSet优缺点
- 优点:添加、删除、查询速度快
缺点:添加的元素是无序的
public class HashSetDemo1 { public static void main(String[] args) { Set set = new HashSet(); set.add(new Student("王五", 20)); set.add(new Student("张三", 10)); set.add(new Student("李四", 20)); print(set); System.out.println("************"); // 移除所有数据 // set.clear(); // 是否包含指定元素 需要重写equals方法和HashCode方法 // boolean contains = set.contains(new Student("张三", 10)); // System.out.println(contains); // 删除指定元素 需要重写equals方法和HashCode方法 set.remove(new Student("李四", 20)); print(set); } private static void print(Set set) { for (Object s : set) { System.out.println(s); } }
}
四、TreeSet
- 实现Comparable接口、重写compareTo方法可以实现自动去重的功能
- contains()、remove()需要实现Comparable接口、重写compareTo方法
- 采用二叉树(红黑树)的存储结构
TreeSet优缺点
- 优点 : 查询速度比list快(升序按照内容查询)
缺电 : 查询速度没有HashSet快
public class TreeSetDemo { public static void main(String[] args) { Set set=new TreeSet(); set.add(new Student("李四",20)); set.add(new Student("张三", 10)); set.add(new Student("李四",20)); set.add(new Student("张三", 10)); print(set); System.out.println("***************"); // boolean contains = set.contains(new Student("张三", 10)); // System.out.println(contains); set.remove(new Student("李四",20)); print(set); } private static void print(Set set) { // for(Object o :set){ // System.out.println(o); // } for(int i=0;i<set.size();i++){ Object[] array = set.toArray(); System.out.println(array[i]); } } }
五、映射
1.HashMap
Map<K, V> map=new HashMap<key>();
* K代表Key 无序的 唯一的
* V代表Value 无序的不唯一的
Map<String,String> map=new HashMap<>();
map.put("姓名", "张三");
//Map<String,String>value只能写String类型
map.put("年龄", 10);
2.TreeMap
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class TestTreeMap1 {
public static void main(String[] args) {
Map map=new TreeMap<>();
//key实现了排序
map.put("2", "c");
map.put("1", "b");
map.put("3", "d");
map.put("4", "a");
print(map);
}
private static void print(Map map) {
Set keySet = map.keySet();
for(Object o:keySet){
System.out.println(o+"----"+map.get(o));
}
}
}
五、泛型
- List <>括号中放什么,集合中只能存什么类型 (其他类型同理 比如:HashSet)
//说明集合中只能放String类型的 List<String> list=new ArrayList<>();
Map