List接口的子实现类

list接口三个常用的子实现类:ArrayListVectorlinkedlist

List集合子类的特点:

  1> ArrayList(默认使用此类)

    内部是一种数组实现,查询快,增删慢

    线程不安全,--à不同步-à执行效率高

2>Vector:

    底层是一种数组实现,查询快,增删慢

    线程安全的类,同步-à执行效率低

            StringBuffer:线程安全的类

3>LinkedList:

    底层是一种链接表实现,查询慢,增删快,

    线程不安全,不同步-à执行效率高

 

一.Arraylist 

  遍历功能:

  1)一个是Collectioniterator()

  2)size()get(int index)普通for循环

举例:

1. package org.westos_04;  

2. import java.util.ArrayList;  

3. import java.util.Iterator;  

4. import java.util.List;    

5. import java.util.concurrent.SynchronousQueue;    

6. public class ListTest3 {          

7.   

8.        publicstatic void main(String[] args) { 

9.               //创建集合对象    

10.               Listlist = new ArrayList()   ;                    

11.               //创建4个学生对象    

12.               Students1 = new Student("高圆圆", 27) ;    

13.               Students2 = new Student("赵又廷", 30) ;    

14.               Students3 = new Student("文章", 29) ;    

15.               Students4 = new Student("马伊琍", 39) ;    

16.               list.add(s1);    

17.               list.add(s2);    

18.               list.add(s3);    

19.               list.add(s4);                   

20.               //方式1:获取迭代器的方式    

21.               Iteratorit = list.iterator() ;    

22.               while(it.hasNext()){    

23.                     Students = (Student)it.next;                           

24.                      System.out.println(s.getName()+"---"+s.getAge());    

25.               }                   

26.               System.out.println("--------------------------");            

                 

27.               //方式2:size()和get(intindex)结合: 普通for循环    

28.               for(intx =0 ;x < list.size() ; x ++) {    

29.                      Students = (Student)list.get(x) ;    

30.                      System.out.println(s.getName()+"---"+s.getAge());    

31.               }    

32.        }      

33. }  
这里我们需要注意一个问题,我们举例说明

例题

需求:给集合中添加重复的元素(字符串类型),将重复的元素从集合去除掉!

分析:

1)创建一个旧集合,添加重复元素

2)创建一个新集合

  3)遍历旧集合中的元素获取到每一个元素

在旧集合中判断新集合中是否包含旧集合中的元素

  包含,不搭理

  不包含,添加到新集合中

4) 遍历新集合

public class ArrayListTest {

public static void main(String[] args) {

//创建一个集合

ArrayList list = new ArrayList() ;

//添加元素

list.add("hello") ;

list.add("world") ;

list.add("java") ;

list.add("javaee") ;

list.add("hello") ;

list.add("world") ;

list.add("hello") ;

list.add("javaee") ;

list.add("android") ;

list.add("python") ;

list.add("php") ;

list.add("php") ;

//创建一个新的集合

ArrayList newList = new ArrayList() ;

//遍历旧集合

Iterator it = list.iterator() ;

while(it.hasNext()) {

String s = (String) it.next() ;

//判断新集合中是否包含旧集合中的元素

if(!newList.contains(s)) {

newList.add(s) ;

}

}

//遍历新集合

Iterator it2 = newList.iterator() ;

while(it2.hasNext()) {

String s = (String) it2.next() ;

System.out.println(s);

}

}

需求:使用集合ArrayList存储自定义对象(Student),去除重复的对象

 问题:按照存储字符串(新建集合的思想)的形式来去存储自定义对象,发现自定义对象并没有去重,为什么?

   contains方法底层依赖于equals方法

  equals方法默认比较的是地址值,如果想让equals()方法比较他们的内容是否相同,需要重写equals(),

 也就意味着存储自定义类,必须重写

  equals()方法,这样才能比较的是这些对象的内容是否相同

public class ArrayListTest3 {

 

public static void main(String[] args) {

//创建一个ArrayList集合

ArrayList array = new ArrayList() ;

//创建4个学锁对象

Student s1 = new Student("高圆圆", 27);

Student s2 = new Student("文章", 29);

Student s3 = new Student("王力宏", 30);

Student s4 = new Student("高圆圆", 27);

Student s5 = new Student("高圆圆", 29);

array.add(s1) ;

array.add(s2) ;

array.add(s3) ;

array.add(s4) ;

array.add(s5) ;

//创建一个新集合

ArrayList newArray = new ArrayList() ;

//遍历旧集合

Iterator it = array.iterator() ;

while(it.hasNext()) {

Student s = (Student)it.next() ;

//判断,新集合中是否包含

if(!newArray.contains(s)) {

newArray.add(s) ;

}

}

//遍历新集合

Iterator it2 = newArray.iterator() ;

while(it2.hasNext()) {

Student s= (Student)it2.next();

System.out.println(s.getName()+"---"+s.getAge());

}

}

}

 

 

二.Vector

 特有功能:

1>public void addElement(Object obj)------->add(Object obj)

2>public Enumeration elements():返回此向量的枚举

--->相当于:public Iterator iterator()

3>boolean hasMoreElements()  --->boolean hasNext() ;

4>Object nextElement()   --->Object next() ;

 举例:

public class VectorDemo {

public static void main(String[] args) {

//创建集合对象

Vector v = new Vector() ;

//添加元素

v.addElement("hello");

v.addElement("world");

v.addElement("java");

//遍历

//获取Enumeration :向量的枚举

Enumeration en = v.elements() ;

while(en.hasMoreElements()) {

String s = (String)en.nextElement() ;

System.out.println(s);

}

}

}

三. LinkedList

特有功能:

  添加功能

  addFirst(Object e):将指定的元素插入到列表的开头

  addLast(object e):将指定的元素添加到列表末尾

  获取功能:

  getFirst():获取列表第一个元素

  getLast():获取列表最后一个元素

  删除功能

  public Object removeFirst()移除并返回此列表的第一个元素。

  public Object removeLast()移除并返回此列表的最后一个元素

举例:

public class LinkedListDemo {

public static void main(String[] args) {

//创建LinkedList集合对象

LinkedList link = new LinkedList() ;

//添加元素

link.add("hello");

link.add("world");

link.add("java");

System.out.println("link:"+link);

//addFirst(Object e):将指定的元素插入到列表的开头

link.addFirst("android");

System.out.println("link:"+link);

link.addLast("mysql");

System.out.println(link);

//getFirst():获取列表第一个元素

System.out.println(link.getFirst());

System.out.println(link.getLast());

//public Object removeFirst()移除并返回此列表的第一个元素。

System.out.println("removeFirst():"+link.removeFirst());

System.out.println(link);

//public Object removeLast()移除并返回此列表的最后一个元素。

System.out.println(link.removeLast());

}

}

可总结出linkedlist的特点:元素先进后出

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值