Java 集合框架 Arraylist的基本使用方法、Vector的特有方法、LinkedList的特有方法、在集合中删除重复自定义类型元素(重写equals方法)
面试时:
集合继承体系图
还是这个图,上一篇学了List接口,这篇讲的是List底下继承的三个类。
上篇链接:
Java 集合框架 List的方法,List集合特有的遍历功能,listIterator的功能,并发修改异常ConcurrentModificationException的原因和解决办法
https://blog.csdn.net/weixin_43580841/article/details/107462169
List底下三个类:
Arraylist:底层数据结构是数组(顺序表),查询快,增删慢。线程不安全,效率高。
Vector:底层数据结构是数组(顺序表),查询快,增删慢。线程安全,效率低。
LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高。
Arraylist的基本使用方法
ArrayList l = new ArrayList();
l.add(new Student(22,"sf"));//Student自定义类
l.add(new Student(21,"shff"));
l.add(new Student(20,"sffg"));
l.add(new Student(19,"sdff"));
for(Iterator it = l.iterator();it.hasNext();){
Student p = (Student) it.next();
System.out.println(p);
}
Vector的特有方法
addElement是很早之前就有的方法。和通用的add方法效果一样。
Enumeration也是Vector中很早之前就有的迭代器,效果和集合体系中通用的一样。
Vector v = new Vector();
v.addElement("a");
v.addElement("b");
v.addElement("c");
//Vector迭代
Enumeration en = v.elements();
while (en.hasMoreElements()){
System.out.println(en.nextElement());
}
运行结果:
a
b
c
LinkedList的特有方法
addFirst方法在头添加,addLast方法在尾添加。
getLast获取最后一个元素,getFirst获取第一个元素(不会被删)。
removeFirst删除第一个,removeLast删除最后一个元素。
在集合中删除重复元素
一般使用集合框架中的contains方法判断是否包含重复元素,举个例子:
private static ArrayList getSingle(ArrayList l){
ArrayList newList = new ArrayList();
for (Iterator it = l.iterator();it.hasNext();){
Student p = (Student)it.next();//Student是自定义类,List中的元素都是Student类型
if(!newList.contains(p)){//判断新List中是否有重复
newList.add(p);//没有重复就加到新List中
}
}
return newList;//返回新List
}
但是contains方法是通过equals方法实现的,如果传入的对象没有重写equals方法,contains方法判断相等的根据就直接是地址值(通过add方法加入的元素地址都不会相等,contains方法约等于没用)。
也就是说,集合元素是自定义类的时候,如果要使用contains方法,一定要在自定义类中重写equals方法,举个例子,如果我的ArrayList元素是自定义的Student类,那么我判断元素相等的依据就是姓名和年龄相等,重写equals方法如下:
主方法:
ArrayList a = new ArrayList();
a.add(new Student(27,"fdd"));
a.add(new Student(27,"fdd"));
a.add(new Student(27,"fdd"));
ArrayList n = getSingle(a);
System.out.println(n);
运行结果:[Student{age=27, name=‘fdd’}]
PS:集合框架中通用的remove方法也是通过equals实现的,所以集合元素为自定义类时,要使用remove方法删除元素,也要在自定义类中重写equals方法。