黑马程序员——java集合中的ArrayList和LinkedList


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

1.       为什么出现集合类?

java是一种面向对象的语言,它对事物的体现都是以对象的形式,所以为了方便对多个对象进行操作,需要对对象进行存储,而集合就是存储对象最常用的一种方式。集合类存放于java.util包中。

2.        集合与数组的区别:

数组:a) 数组的长度是固定的,数组一旦被创建,其长度就不可改变;b) 数组既可以存储对象,还可以存储基本数据类型;c) 数组中的元素类型在数组创建时就已确定,且一个数组中只能存放同一种类型的元素;

集合:a) 集合的长度是可变的;b) 集合中只可以存储对象,不可以存储基本数据类型;c) 同一个集合中可以存储不同类型的元素;

注意:集合中存放的是对象的引用,而非对象本身;

3.        java集合框架:

Java的集合类主要由两个接口派生而出:Collection和Map.

Collection接口派生出了两个重要的子接口:List、Set;

4.        实现List接口的三个重要集合类:ArrayListLinkedListVector

a)      ArrayList:底层数据结构使用的是数组结构;查询速度快,增删慢;线程不同步,与Vector相比,效率较高;

b)      LinkedList:底层数据结构使用的是链表数据结构;增删速度快,查询慢;线程不同步;

c)      Vector:底层数据结构使用的是数组数据结构;线程同步,效率低;

5.       ArrayList、LinkedList类中常用的方法:

添加元素:

ArrayList:add(E e): 返回值类型为boolean;

         add(index, E e): 返回值类型为void;在指定角标位置添加元素,角标之后的元素依次后移;

                  addAll(Collection c): 返回值类型为boolean;在集合末尾添加传入的集合;

         addAll(index,Collection c): 返回值类型为boolean;在指定角标位置添加传入的集合;

LinkedList:拥有ArrayList的所有添加元素的方法,其特有的添加方法有:

         addFirst(E e): 返回值类型为void;添加元素至列表开头;

         addLast(E e): 返回值类型为void;添加元素至列表末尾;

         offer(E e): 返回值类型为boolean;添加元素至列表开头;

         offerFirst(E e): 返回值类型为boolean;添加元素至列表开头;

         offerLast(E e): 返回值类型为boolean;添加元素至列表末尾;

获取元素:ArrayList:get(index): 返回值指定角标位置的元素;

                             indexOf(obj): 返回指定元素在列表中首次出现的位置;若列表中无此元素则返回-1;

                             lastIndexOf(obj): 返回指定元素在列表中最后一次出现的位置;若列表中无此元素则返回-1;

LinkedList:拥有ArrayList的所有获取元素的方法,其特有的获取方法有:

         getFirst(): 返回列表中第一个元素;

         getLast(): 返回列表中最后一个元素;

         peekFirst(): 获取列表的第一个元素,若列表为空则返回null;

         peekLast(): 获取列表的最后一个元素,若列表为空则返回null;

删除元素:ArrayList:remove(index): 删除指定位置的元素,并返回该元素;

         remove(obj): 返回值类型为boolean;移除列表中首次出现的该元素;

         removeRange(fromIndex,toIndex): 返回值类型为void;移除指定角标范围的元素,包括头,不包括尾;

LinkedList:除了removeRange(fromIndex, toIndex),拥有ArrayList的其它所有获取元素的方法,其特有的获取方法有:

         removeFirst(): 移除并返回列表中第一个元素;

         removeLast(): 移除并返回列表中最后一个元素;

removeFirstOccurrence(obj):返回值类型为boolean;移除列表中第一次出现指定元素;

removeLastOccurrence(obj):返回值类型为boolean;移除列表中最后一次出现指定元素;

         pollFirst(): 获取并移除列表的第一个元素,若列表为空则返回null;

         pollLast(): 获取并移除列表的最后一个元素,若列表为空则返回null;

修改元素:ArrayList:set(index, E e): 把列表中指定位置的元素设置为e,并返回被替换的元素;

                LinkedList:set(index, E e): 把列表中指定位置的元素设置为e,并返回被替换的元素;

操作元素的其它方法:ArrayList 和 LinkedList 通用的其它方法有:

                             contains(obj): 返回值类型为boolean,判断列表中是否含有指定元素;

                             isEmpty(): 返回值类型为boolean,判断列表是否为空;

                             size(): 返回列表中的元素个数;

6.        迭代器法遍历ArrayListLinkedList集合,并操作集合中的元素:

a)     ArrayList集合为例,采用Iterator迭代器遍历集合,把集合中内容为“hello”的字符串对象删除,代码如下:

import java.util.ArrayList;

import java.util.Iterator;

public class ArrayListDemo {

publicstatic void main(String[] args){

           ArrayList<String>al=new ArrayList<String>();

           al.add("xingming");

           al.add("xingbie");

           al.add("hello");

           al.add("jiguan");

           al.add("hello");

           System.out.println(al);

           Stringstr=null;

           for(Iterator<String> it =al.iterator();it.hasNext();){

                    str=it.next();

                    if(str.equals("hello"))

                             it.remove();

           }

           System.out.println(al);

}

}

Iterator 迭代器的特点:Iterator迭代器中只有三个方法:hasNext();  next(); remove();Iterator对列表中的元素只有删除的功能,作用非常有限。

b)     ListIterator迭代器中对集合中元素的操作方法丰富,可进行增,删,改,还可对集合进行倒序遍历;

下面以ArrayList集合为例,在遍历集合时对集合中的元素进行全部替换,并倒序遍历进行打印,代码如下:

import java.util.ArrayList;

import java.util.ListIterator;

public class ArrayListDemo2 {

    publicstatic void main(String[] args){

              ArrayList<String>al=new ArrayList<String>();

              al.add("xingming");

              al.add("xingbie");

              al.add("jiguan");

              System.out.println(al);

              intcount=0;

              ListIterator<String>it =al.listIterator();

              for(;it.hasNext();){

                       it.next();

                       it.set((count++)+"");

              }

              for(;it.hasPrevious();)

                       System.out.print(it.previous()+'\t');

    }

}

7.        集合工具类——Collections

Collections是集合类的一个工具类(帮助类),其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

1) 排序(Sort)

使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。前提是列表中的所有元素都必须实现 Comparable接口。

或者定义一个比较器,然后把该比较器对象传入sort方法中,就可以把此列表内元素按照指定的比较器进行比较。

通过该方法,List集合可以实现与TreeSet集合相似的比较功能,不过有一个重要区别就是:List集合中允许同一个对象在集合中的多个位置存在,而TreeSet集合中要求同一个对象只能存入一次。

2) 随机排序(Shuffle

该方法可使用默认或指定的随机源对集合中的元素进行随机排序,这样的排列具有相同的可能性(假设随机源是公正的)。若把集合中的元素看成扑克牌,则该方法实现的功能就是洗牌。

3) 反转(Reverse)

该方法可以反转指定列表中元素的顺序。以ArrayList为例,代码示例如下:

 importjava.util.*;

 

public class Collection_Reverse {

         publicstatic void main(String[] args){

                   ArrayList<String>al=new ArrayList<String>();

                   al.add("zhangsan");

                   al.add("lisi");

                   al.add("wangwu");

                   System.out.println(al);

                   Collections.reverse(al);//反转集合中的元素;

                   System.out.println(al);

         }

}

4) 交换(swap):

 swap(List<?> list, int i, int j),该方法可以交换集合中两个指定角标位置上的元素。

5) 拷贝(Copy) 

用两个参数,一个目标 List和一个源 List,将源的元素拷贝到目标,并覆盖它的内容。目标 List至少与源一样长。如果它更长,则在目标 List中的剩余元素不受影响。用法: Collections.copy(list1,list2):后面一个参数是目标列表 ,前一个是源列表 

6) 返回集合中最小元素(min)和最大元素(max) 

这两个方法可根据元素的自然顺序,返回给定集合中的最小元素和最大元素。若给定比较器,并把比较器传入这两个方法,则可根据指定比较器产生的顺序,返回给定集合的最小元素和最大元素。具体用法如下:

按默认顺序返回:Collections.max(List list)Collections.min(List list)

按比较器顺序返回:Collections.max(Listlistcomparator)Collections.min(Listlistcomparator)

 


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值