四、集合(List)

集合(List)

|--Collection

    |--List

       |--ArrayList(主要)

       |--LinkedList

       |--Vector

    |--Set

       |--HashSet

       |--TreeSet

    |--Map

        |--HashMap

        |--TreeMap

接下来我就根据上面这个集合体系图来介绍集合框架

Collection定义了集合框架的共性功能。

1,添加

       add(e);

       addAll(collection);

2,删除

       remove(e);

       removeAll(collection);

       clear();

3,判断。

       contains(e);

       isEmpty();

4,获取

       iterator();(迭代器)

       size();

这的共性方法就不一一说明了,重点说一下迭代器

什么是迭代器呢?

其实就是集合的取出元素的方式。

通过容器的iterator()方法获取该内部类的对象。

classCollectionDemo

{

       public static void main(String[] args)

       {

              method_get();

       }

       public static void method_get()

       {

              ArrayListal = new ArrayList();

              al.add("java01");

              al.add("java02");

              al.add("java03");

              al.add("java04");

              for(Iteratorit = al.iterator(); it.hasNext() ; )

              {

                     System.out.println(it.next());

              }

       }

}

 

|--List元素是有序的,元素可以重复。因为该集合体系有索引。

|--ArrayList:底层的数据结构使用的是数组结构。特点:查询快,增删稍慢。线程不同步。

       |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。

|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。

ArrayList

       特有方法。凡是可以操作角标的方法都是该体系特有的方法。

       add(index,element);

       addAll(index,Collection);

       remove(index);

       set(index,element);

       get(index):

       subList(from,to);

       listIterator();

       int indexOf(obj):获取指定元素的位置。

       ListIterator listIterator();

特有迭代器:

List集合特有的迭代器。ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。

因为会发生ConcurrentModificationException异常。

所以只能对元素进行判断,取出,删除的操作,

如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

 

下面通过一个实例来说明对ArrayList的理解

 

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。

思路:

1,对人描述,将数据封装进人对象。

2,定义容器,将人存入。

3,取出。

List集合判断元素是否相同,依据是元素的equals方法。

 

importjava.util.*;

classPerson

{

       private String name;

       private int age;

       Person(String name,int age)

       {

              this.name= name;

              this.age= age;

       }

      

       public boolean equals(Object obj)

       {

              if(!(objinstanceof Person))

                     return false;

              Personp = (Person)obj;

              returnthis.name.equals(p.name) && this.age == p.age;

       }

       public String getName()

       {

              returnname;

       }

       public int getAge()

       {

              returnage;

       }

}

classArrayListTest2

{

       public static void sop(Object obj)

       {

              System.out.println(obj);

       }

       public static void main(String[] args)

       {

              ArrayListal = new ArrayList();

 

              al.add(newPerson("lisi01",30));

              al.add(newPerson("lisi02",32));

              al.add(newPerson("lisi02",32));

              al.add(newPerson("lisi04",35));

              al.add(newPerson("lisi03",33));

              al.add(newPerson("lisi04",35));

 

              Iteratorit = al.iterator();

              while(it.hasNext())

              {

                     Person p = (Person)it.next();

                     sop(p.getName()+"::"+p.getAge());

              }

       }

}

LinkedList

LinkedList:特有方法:

addFirst();

addLast();

 

getFirst();

getLast();

获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

 

removeFirst();

removeLast();

获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

 

在JDK1.6出现了替代方法。

 

offerFirst();

offerLast();

 

peekFirst();

peekLast();

获取元素,但不删除元素。如果集合中没有元素,会返回null。

 

pollFirst();

pollLast();

获取元素,但是元素被删除。如果集合中没有元素,会返回null。

 

/*

使用LinkedList模拟一个堆栈或者队列数据结构。

堆栈:先进后出  如同一个杯子。

队列:先进先出 First in First out  FIFO 如同一个水管。

*/

importjava.util.*;

classDuiLie

{

       private LinkedList link;

 

       DuiLie()

       {

              link= new LinkedList();

       }

      

       public void myAdd(Object obj)

       {

              link.addFirst(obj);

       }

       public Object myGet()

       {

              returnlink.removeFirst();

       }

       public boolean isNull()

       {

              returnlink.isEmpty();

       }

 

}

 

class  LinkedListTest

{

       public static void main(String[] args)

       {

              DuiLiedl = new DuiLie();

              dl.myAdd("java01");

              dl.myAdd("java02");

              dl.myAdd("java03");

              dl.myAdd("java04");

 

              while(!dl.isNull())

              {

                     System.out.println(dl.myGet());

              }

       }

}

 

 

Vector

枚举其实就是一个古老的迭代器

因为枚举的名称以及方法的名称都过长。

所以被迭代器取代了。

importjava.util.*;

 

classVectorDemo

{

       public static void main(String[] args)

       {

              Vectorv = new Vector();

 

              v.add("java01");

              v.add("java02");

              v.add("java03");

              v.add("java04");

 

              Enumerationen = v.elements();

 

              while(en.hasMoreElements())

              {

                     System.out.println(en.nextElement());

              }

       }

}

总结:集合框架是一个比较繁琐的概念,所以一开始我们必须去多练习,写多了代码也就知道它们各自的特点以及在什么时候去使用了、、


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值