[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IH2DQHN-1589618084726)(http://www.njlife123.com/upload/2020/05/praqdfjm3ki4cpufsr45vv480c.png)]
List
List的特点:有序(迭代顺序和添加顺序保持一致),可以重复
ArrayList
基于数组的实现
在容器中添加元素:Collection
//向列表的尾部添加元素
boolean add(E e);
获取容器中的元素: List
//返回列表中指定位置元素
E get(int index);
获得容器中元素的个数: Collection
//返回列表元素个数
int size();
修改容器中的元素: List
//用指定的元素替换列表的元素
E set(int index, E element);
移除容器中的元素: List
//移除列表指定元素
boolean remove(Object o);
遍历所有元素:Collection
//返回迭代器
Iterator<E> iterator();
Iterator接口中的方法:
//判断迭代器是否还有下一个元素
boolean hasNext();
//获取下一个元素
E next();
ArrayList基本应用:
public static void main(String[] args) {
List list = new ArrayList();
list.add("11111");
list.add("22222");
list.add("33333");
list.add(new Integer(1));
list.remove(0);//根据下标移除
list.remove("11111");//根据元素移除
list.set(1,"rrrrrr");//修改指定位置元素
System.out.println(list.size());//获取元素总数
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));//访问元素
}
}
ArrayList使用迭代器迭代:
public static void main(String[] args) {
List list = new ArrayList();
list.add("11111");
list.add("22222");
list.add("33333");
list.add(new Integer(1));
list.remove(0);//根据下标移除
list.remove("11111");//根据元素移除
list.set(1,"rrrrrr");//修改指定位置元素
Iterator iterator = list.iterator();
if(iterator.hasNext()){
System.out.println( iterator.next());
}
}
增强for循环:
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("11111");
list.add("22222");
list.add("33333");
for (String str:list) {
System.out.println(str);
}
}
使用ArrayList保存自定义对象:
public class Stu {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public static void main(String[] args) {
List<Stu> list = new ArrayList();
list.add(new Stu("tom",20));
list.add(new Stu("lili",12));
list.add(new Stu("didi",44));
for (Stu stu:list) {
System.out.println(stu.getName());
}
}
LinkedList
基于双向链表的实现
基本应用:
public static void main(String[] args) {
List list = new LinkedList();
list.add("11111");
list.add("22222");
list.add("33333");
list.add(new Integer(1));
list.remove(0);//根据下标移除
list.remove("11111");//根据元素移除
list.set(1,"rrrrrr");//修改指定位置元素
System.out.println(list.size());//获取元素总数
for (int i=0;i<list.size();i++){
System.out.println(list.get(i));//访问元素
}
}
LinkedList中添加了一些特定的对头,尾数据操作的方法:
要使用这些方法,声明时,就要适用LinkedList
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add("11111");
list.add("22222");
list.add("33333");
list.addLast("8888");//添加在最后
list.removeFirst();//移除一个
}
ArrayList和LinkedList的适用场合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88hHQy9p-1589618084750)(http://www.njlife123.com/upload/2020/05/05thvdqq28jttomck9ks84flob.png)]
常用操作是删除或者插入,适用LinkedList
常用操作是遍历,适用ArrayList
Set
特点:无序(迭代顺序和添加顺序不一致),不能重复
HashSet
HashCode()和equals()的常规协定:
2个对象equals()相等,hashCode()一定相等
2个对象hashCode()相等,equals ()不一定相等
HashSet如何判断是否重复:
1.先用hashCode()判断
2.如果hashCode()相等,再用equals()判断
//伪代码表示:
If(hashCode()相等){
If(equals()相等){
已经存在,不加入集合
}else{
是新元素,加入集合
}
}else{
是新元素,加入集合
}
基本用法:
假如自定义对象要使用HashSet存放,其应该重写equals和hashCode方法,并符合常规协定:
例如:
测试代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D886Q2hn-1589618084756)(http://www.njlife123.com/upload/2020/05/11cbhsks4ogr5rei2vhamc41n5.png)]
TreeSet
自然顺序:实现了Comparable接口, 此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
TreeSet的使用:
使用空参构造,对象本身必须有自然顺序
使用下面的构造,传入一个比较器,在比较器中定义比较规则,此时对象本身可以不实现Comparable接口
比较器如何实现:
实现Comparator接口,实现compare方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hD3ENn4a-1589618084766)(http://www.njlife123.com/upload/2020/05/12nrt6igrogc7q2uifktid1qk7.png)]
比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数
使用TreeSet的2种方式:
1.对象本身实现Comparable接口
例如:
测试代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fzqz0LAe-1589618084769)(http://www.njlife123.com/upload/2020/05/2vla91glg6id0o550nm2uql6ni.png)]
2.对象本身不实现Comparable接口,在比较器中定义比较规则
例如:
自定义比较器:
测试代码:
Map
HashMap
基于散列表的键值对实现:根据key的hashCode,计算其在数组中保存的位置,将其保存到对应位置,假如key重复,用新值替换旧值。
基本用法:
遍历方式一:
遍历方式二:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8tvYreO-1589618084784)(http://www.njlife123.com/upload/2020/05/7e0cp1sn08hfap9c3ajdt7kst7.png)]
遍历方式三:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhuX4bxU-1589618084787)(http://www.njlife123.com/upload/2020/05/raq8luj1k6gn0ocbjcsl4n7ec1.png)]
TreeMap
键必须有自然顺序或者构造TreeMap时传入比较器,做法同TreeSet
工具类Collections
包含对集合的常用操作方法:
代码:
历史集合类
Vector和ArrayList
HashTable和HashMap
前者是线程安全的,后者是线程不安全的