ArrayList-LinkedList-Vector
来源:互联网 发布:淘宝联盟有什么用 编辑:程序博客网 时间:2024/05/23 18:59
ArrayList
ArrayList是List接口的一个实现类,ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数组的结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很便捷。
构造方法
- ArrayList()
- ArrayList(Collection< ? extends E> c)
- ArrayList(int initialCapacity)
方法
- Object clone()
- void ensureCapacity(int minCapacity)
- protected void removeRange(int fromIndex,int toIndex)
- void trimToSize()
1.练习:去除ArrayList中重复字符串元素
package com.first;import java.util.ArrayList;import java.util.Iterator;public class HelloWorld { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("b"); list.add("a"); ArrayList newList=getSingle(list); System.out.println(newList); } /* * 创建集合将重复元素去掉 * 1.明确返回值类型:ArrayList * 2.明确参数列表:ArrayList * 分析: * 1.创建新集合 * 2.根据传入的集合(老集合)获取迭代器 * 3.遍历老集合 * 4.通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加 */ private static ArrayList getSingle(ArrayList list) { ArrayList newList=new ArrayList(); Iterator it=list.iterator(); while (it.hasNext()) { Object obj=it.next(); if (!newList.contains(obj)) { newList.add(obj); } } return newList; }}
运行结果为
[a, b]
System.out.println(newList);
可以将集合打印出来,是因为ArrayList的父类的父类AbstractCollection重写了toString()方法,这个方法又会调用每个元素的toString()方法,这里的元素是字符串,字符串默认已经重写了toString()方法。所以打印出来的不是其全类名@哈希值。
2.练习:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
package com.first;import java.util.ArrayList;import java.util.Iterator;public class HelloWorld { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(new Student("张三",22)); list.add(new Student("张三",22)); list.add(new Student("李四",23)); list.add(new Student("张三",22)); ArrayList newList=getSingle(list); System.out.println(newList); } private static ArrayList getSingle(ArrayList list) { ArrayList newList=new ArrayList(); Iterator it=list.iterator(); while (it.hasNext()) { Object obj=it.next(); if (!newList.contains(obj)) { newList.add(obj); } } return newList; }}class Student { String name; int age; public Student(String name, int age) { this.name = name; this.age = 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; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override public boolean equals(Object obj) { Student s=(Student)obj; return this.name.equals(s.name)&&this.age==s.age; }}
运行结果为
[Student [name=张三, age=22], Student [name=李四, age=23]]
contains方法底层依赖的是equal方法
LinkedList
构造方法
- LinkedList()
- LinkedList(Collection< ? extends E> c)
方法
- void addFirst(E e)
- void addLast(E e)
- E getFirst()
- E getLast()
- E removeFirst()
- E removeLast()
用LinkedList模拟栈结构
package com.first;import java.util.LinkedList;public class HelloWorld { public static void main(String[] args) { Stack s = new Stack(); s.in("a"); s.in("b"); s.in("c"); s.in("d"); while (!s.isEmpty()) { System.out.println(s.out()); } }}class Stack { private LinkedList list = new LinkedList(); /* * 模拟进栈方法 */ public void in(Object obj) { list.addLast(obj); } /* * 模拟出栈 */ public Object out() { return list.removeLast(); } /* * 模拟栈是否为空 */ public boolean isEmpty() { return list.isEmpty(); }}
Vector
没有集合前,用Vector,集合体系出现后,Vector已经完全不被重用了。
List的三个子类的特点
ArrayList:
底层数据结构是数组,线程不安全,效率高。
Vector:
底层数据结构是数组,线程安全,效率低,无论增删改查都慢。
LinkedList:
底层数据结构是链表,线程不安全,效率高。
查询多用ArrayList
增删多用LinkedList
如果都多用ArrayList
0 0
- Vector,ArrayList与LinkedList
- 分清Vector、ArrayList、LinkedList
- ArrayList LinkedList Vector类
- ArrayList LinkedList Vector(转)
- Vector, ArrayList, LinkedList
- ArrayList、Vector和LinkedList
- LinkedList、ArrayList和Vector
- ArrayList Vector LinkedList 区别
- ArrayList、LinkedList、Vector
- LinkedList,ArrayList和Vector
- LinkedList、ArrayList、Vector
- ArrayList Vector LinkedList
- Vector Arraylist LinkedList 区别
- ArrayList、Vector、LinkedList区别
- ArrayList、Vector和LinkedList
- ArrayList、Vector和LinkedList
- ArrayList、LinkedList、 Vector、Map
- arraylist vector linkedlist
- 基于云架构监控摄像头直播运营简介
- c++中new在子函数中的使用
- 如何调优JVM - 优化Java虚拟机(大全+实例)
- bzoj1003 [ZJOI2006]物流运输
- 彻底解决Spring mvc中文乱码问题
- ArrayList-LinkedList-Vector
- 1094. The Largest Generation (25) PAT甲级
- 在同一个mysql服务器上不同的数据库之间复制数据表
- Ubuntu 中安装opencv2411
- 1030. Travel Plan (30)
- Qt之QTableWidget详解
- 无限分类,列表页数据展现
- hadoop 安装常见的异常
- Java泛型