码迷,mamicode.com
首页 > 编程语言 > 详细

【Java学习笔记】集合框架Ⅱ

时间:2016-08-23 13:23:41      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

迭代

    ●迭代是取出集合中元素的一种方式。

    ●因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

    ●用法:

第一种

for (iterator iter=iterator(); iter.hasNext();)  //老外比较喜欢用这种,省内存(iter的内存),开发时用这个
{
   System.out.println(iter.next());      
 }

第二种

Iterator iter = l.iterator();
while(iter.hasNext())
{
     System.out.println(iter.next());
}

迭代注意事项

    ●迭代器在Collection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。

    ●迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。

    ●迭代器的next方法返回值类型是Object,所以要记得类型转换。

 

集合框架中的常用接口

    Collection接口有两个子接口:List(列表),Set(集)

    List:可以存放重复元素,元素存取是有序的(存入和取出的顺序一致)。

    Set:不可以存放重复元素,元素存取是无序的。

List接口

    List特有的常见方法:有一个共同特点就是都可以操作角标。

    1、添加

        void   add(int index , E element);

         void    add(int index , Collection<? extends E> c);

       boolean  addAll(int index , Collection<? extends E> c);

      

 1 import java.util.ArrayList;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         ArrayList al = new ArrayList();
 7         al.add("dfsdf");
 8         al.add("ere");
 9         al.add("fgf");
10         
11         ArrayList a2 = new ArrayList();
12         a2.add("dfsdf");
13         a2.add("ere");
14         a2.add("fgf");
15         
16         
17         al.addAll(1, a2);
18         
19         System.out.println(al);
20         
21         al.add(1, a2);
22         System.out.println(al);
23 
24     }
25 
26 }

 

技术分享

    2、删除:

        E  remove(int index);

    3、修改:

        E  set(int index, E element);

    4、获取:

        E  get(int index);

        int  indexOf(Object o);

        int  lastIndexOf(Object o);

        List  subList(from , to); //不包尾

 

List集合是可以完成对元素的增删改查。

List子接口:

    Vector:内部是数组数据结构,是同步的。增删,查询都很慢。

    ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。

    LinkedList:内部是链表数据结构,是不同步的,增删元素的速度很快。

LinkedList常用方法:

    void  addFirst(E e);

    void  addLast(E e);

    jdk1.6

    boolean  offerFirst(E e);

    boolean  offerLast(E e);

    

 

    E    getFirst();   //获取但不移除,如果链表为空,抛出NoSuchElementException

    E    getLast();

    jdk1.6

    E   peekFirst();  //获取但不移除,如果链表为空,返回null。

    E   peekLast();

 

    E  removeFirst(); //获取但不移除,如果链表为空,抛出NoSuchElementException

    E  removeLast();

    jdk1.6

    E  pollFirst();  //获取但不移除,如果链表为空,返回null。

    E  pollLast();

 

Set接口:

      元素不可以重复,是无序的。

      Set接口中的方法和Collection一致。

Set子接口:

                 HashSet:

          内部数据结构是哈希表,是不同步的。

          

                               如何保证集合的元素唯一性呢?

            是通过对象的hashCode和equals方法来完成对象的唯一性的。

              如果对象hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。

             如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。

                如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。

 

         记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。

         一般情况下,如果定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖hashCode,equals方法。

 

      TreeSet:

          可以对Set集合中的元素进行排序,是不同步的。

          判断元素唯一性的方式就是根据比较方法的返回结果是否是0,是0,就是相同元素,不存。

 

            TreeSet对元素进行排序的方式一:

                   让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖ComparaTo方法。

 

            如果不要按照对象中具备的自然顺序进行排序,如果对象中不具备自然排序,怎么办?

                  那就使用方式二。

            方式二:

                  让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。

                   将该对象作为参数传递给TreeSet集合的构造函数。

 

集合的一些技巧

    需要唯一性吗?

      需要:Set

          需要制定顺序吗?

 

              需要:TreeSet

 

              不需要:HashSet

 

              但是想要一个和存储一致的顺序(有序):LinkedHashSet

 

      不需要:List

        需要频繁增删吗?

          需要:LinkedList

          不需要:ArrayList

 

    如何记住每一个容器的结构和所属体系呢?

      看名字!!!

     List

      --ArrayList

      --LinkedList

    Set

      --HashSet

      --TreeSet

    后缀名就是该集合所属的体系。

    前缀名就是该集合的数据结构。

 

    看到array:就要想到数组,就要想到查询快,有角标。

    看到link:就要想到链表,就要想到增删快,就要想到 add/get/remove +   First/Last的方法。

    看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode和equals方法。

    看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator。

 

    而且通常这些常用的集合容器都是不同步的。

 

【Java学习笔记】集合框架Ⅱ

标签:

原文地址:http://www.cnblogs.com/Newbie-Cai/p/5793951.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!