第1章 集合框架
三种接口的区别:
-
List接口:元素有放入顺序,元素可重复 。和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
-
Set接口:元素无放入顺序,元素不可重复,重复元素会覆盖掉。检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
-
Map接口:Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。Map 没有继承 Collection 接口。
第2章 ArrayList类
/**
扩容机制:
* ArrayList() 空参构造器:默认长度是10(构造一个初始容量为十的空列表。)
* ArrayList默认扩容机制是原来的1.5倍数
* ArrayList()创建的是一个空数组,而不是长度为10的数组,只是在第一次添加时会扩容为10
*/
//泛型:泛指的类型
ArrayList<String> list = new ArrayList<String>();
//添加数据
list.add("安琪拉");
list.add("小乔");
list.add("王昭君");
list.add(1,"大乔"); //根据索引插入指定位置
list.addAll(list); //添加一个集合
//获取数据
System.out.println(list.get(1));
//修改数据
list.set(0,"妲己");
//删除数据
list.remove(5);
list.remove("安琪拉"); //根据数据来删
// list.removeAll(list); //删除集合所有元素
//清空所有数据
// list.clear();
//判断集合中是否包含指定数据
System.out.println(list.contains("妲己"));
//判断集合是否为空
System.out.println(list.isEmpty());
//获取集合中的长度
System.out.println(list.size());
//ArrayList转数组
Object[] array = list.toArray();
System.out.println(Arrays.toString(array));
System.out.println(list);
// list.add(123);
//遍历1
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//遍历2
for (String string:
list) {
System.out.println(string);
}
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//遍历3:迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String string = iterator.next();
System.out.println(string);
}
补充:Vector类
/**
扩容机制:
* 扩容2倍
*/
第3章 LinkedList类
特点:LinkedList
集合的元素在内存中并不连续,从图中我们可以发现LinkedList
对于添加、删除元素效率比较高,对于查找跟修改效率比较低。
LinkedList<String> list = new LinkedList<>();
//添加数据
list.addFirst("123");
list.addFirst("456");
//删除数据
// list.remove();
// list.removeLast();
//修改数据
list.set(0,"666");
//获取数据
list.getFirst();
list.getLast();
//遍历和ArrayList一样
System.out.println(list);
与ArrayList比较:
ArrayList | 内存空间连续、查询快、添加慢、修改快、删除慢 |
LinkedList | 内存空间不连续、查询慢、添加快、修改慢、删除快 |
第4章 HashSet类(底层是HashMap)
HashSet<String> hashSet = new HashSet<>();
//添加
hashSet.add("666");
hashSet.add("陈冠希");
hashSet.add("吴亦凡");
hashSet.add("666");
//删除
// hashSet.remove("666");
//修改数据(无)
//获取数据(无)
//通过遍历获取数据
//遍历1(foreach底层循环就是迭代器iterator)
// for (String string:
hashSet) {
System.out.println(string);
}
//遍历2
//获取迭代器
Iterator<String> iterator = hashSet.iterator();
//后面是否还有数据
while (iterator.hasNext()){
String string = iterator.next(); //获取下一条数据
System.out.println(string);
}
补充:
//1。HashSet添加相同数据后,是覆盖还是没添加进去
// 没添加进去
//2。HashSet是如何判断是同一个对象的
// equals和hashCode两个方法的结果来判断的
第5章 TreeSet类(底层是TreeMap:红黑树)
/**
* TreeSet:可排序集合(要求目标具备排序功能)
*/
若要实现排序,可以用比较器(1、实现Comparable接口 2、重写compareTo方法)
TreeSet<User> treeSet = new TreeSet<>();
User user = new User("zs", 18);
User user1 = new User("ls", 20);
User user2 = new User("ww", 16);
//添加
treeSet.add(user);
treeSet.add(user1);
treeSet.add(user2);
//删除
// treeSet.remove(user);
System.out.println(treeSet);
第6章 迭代器
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i + "");
}
//使用迭代器
//获取迭代器对象
// Iterator<String> iterator = list.iterator();
// while (iterator.hasNext()){
// String string = iterator.next();
// System.out.println(string);
// }
// for (Iterator<String> iterator = list.iterator();iterator.hasNext();){
// String string = iterator.next();
// System.out.println(string);
// }