List三个子实现类分别是:ArrayList, Vector,LinkList.
特点:
ArrayList:
底层数据结构式数组结构,查询块,增删慢
从内存角度考虑:线程不安全的,不同步的,执行效率高
多线程:synchronized :同步的意思 解决线程安全问题
sychronized(锁对象){ 同步代码
共享数据;
}
解决线程安全问题,通过同步可以解决,但是效率低了...
Vector:
这是一个线程安全的类,
底层数据结构是数组:查询快,增删慢
线程安全的,同步,执行效率低!
LinkedList:
:底层数据结构式链表结构,查询慢,增删块
从内存角度考虑:线程不安全,不同步,执行效率高
ArrayList:
ArrayList是List接口中常用的一个子实现类
举例:
public class ArrayListDemo1 { public static void main(String[] args) { ArrayList arr=new ArrayList(); arr.add("hello"); arr.add("world"); arr.add("retain"); Iterator it =arr.iterator(); while(it.hasNext()) { String s=(String)it.next(); System.out.println(s); System.out.println("---------------------"); // for循环遍历 for(int i=0;i<arr.size();i++) { String s1=(String)arr.get(i); System.out.println(s1); } } } }
ArrayList集合存储自定义对象并遍历
举例:
public class ArrayListDemo2 { public static void main(String[] args) { ArrayList arr=new ArrayList(); Student s1=new Student("马云",27); Student s2=new Student("马化腾",42); Student s3=new Student("林泽勋",40); Student s4=new Student("林更新",85); arr.add(s1); arr.add(s2); arr.add(s3); arr.add(s4); Iterator it =arr.iterator(); while (it.hasNext()) { Student s=(Student) it.next(); System.out.println(s); System.out.println("--------------"); for(int i=0;i<arr.size();i++) { Student ss=(Student)arr.get(i); System.out.println(ss); } } } }
Vector: 底层是一种可增长对象数组,查询快,增删慢
线程安全,同步,执行效率低
特有功能:
public void addElement(Object obj)------->add(Object obj)
public Enumeration elements():返回此向量的枚举--->相当于:public Iterator iterator()
boolean hasMoreElements() --->boolean hasNext() ;
Object nextElement() --->Object next() ;
举例:
public class VectorDemo1 { public static void main(String[] args) { Vector v=new Vector(); v.addElement("hello"); v.addElement("world"); v.addElement("retain"); Enumeration en=v.elements(); while(en.hasMoreElements()) { String s=(String)en.nextElement(); System.out.println(s); } } }
LinkedList:
LinkedList集合的特点:
底层是一种链表实现,查询慢,增删快
线程不安全的,不同步,执行效率高
特有功能:
添加功能
addFirst(Object e):将指定的元素插入到列表的开头
addLast(object e):将指定的元素添加到列表末尾
获取功能:
getFirst():获取列表第一个元素
getLast():获取列表末尾元素
删除功能
public Object removeFirst()移除并返回此列表的第一个元素。
public Object removeLast()移除并返回此列表的末尾元素。
举例:
* @author 田伟 * */ public class LinkedListDemo1 { public static void main(String[] args) { LinkedList l=new LinkedList(); l.add("a"); l.add("b"); l.add("c"); l.add("d"); System.out.println(l); l.addFirst("hello"); l.addLast("world"); System.out.println(l); System.out.println(l.getFirst()); System.out.println(l.getLast()); System.out.println("------------"); System.out.println(l.removeLast()); System.out.println(l.removeFirst()); System.out.println(l); } }
注释:在开发中,一般情况下,如果不提示用那个集合,都默认为ArrayList.
ArrayList的一些应用
需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉!
思路:
1)创建一个旧集合,添加重复元素
2)创建一个新集合
3)遍历旧集合中的元素获取到每一个元素
在旧集合中判断新集合中是否包含旧集合中的元素
包含,不搭理
不包含,添加到新集合中
4)遍历新集合
* @author 田伟 * */ public class ArrayListTest1 { public static void main(String[] args) { ArrayList<String> arr=new ArrayList<String>(); arr.add("a"); arr.add("b"); arr.add("a"); arr.add("c"); arr.add("d"); arr.add("b"); ArrayList<String> arr1=new ArrayList<String>(); Iterator it=arr.iterator(); while(it.hasNext()) { String s=(String)it.next(); if(!arr1.contains(s)) { arr1.add(s); } } for(String s1:arr1) { System.out.println(s1); } } }需求:去重集合中重复的元素
假设:现在的需求:不允许新建一个集合去完成,怎么办?
举例:
**去重集合中重复的元素 * 假设:现在的需求:不允许新建一个集合去完成,怎么办? * @author 田伟 * */ public class ArrayListTest2 { public static void main(String[] args) { ArrayList<String> arr=new ArrayList<String>(); arr.add("c"); arr.add("s"); arr.add("s"); arr.add("c"); arr.add("d"); arr.add("c"); arr.add("n"); /** * 引入选择排序, * 用0索引对应的元素依次和后面索引对应的元素进行比较 * 如果前面的元素和后面的元素重复了,把后面元的干掉 * 依次1索引.... */ for(int i=0;i<arr.size()-1;i++) { for(int j=i+1;j<arr.size();j++) { if(arr.get(i).equals(arr.get(j))) { arr.remove(j); } } } for(String s:arr) { System.out.println(s); } } }