A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenyanwei6 中级黑马   /  2016-11-22 22:56  /  876 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Collection
    |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
        |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
        |--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
        |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
    |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
        |--HasSet:底层是数据结构是哈希表。
        |--TreeSet:

-------------------------------------------------------------------------------------------------   
List特有的方法:
凡是可以操作角标的方法都是该体系特有的方法。
1.增
add(index,element);

2.删
remove(index);

3.改
set(index,element);

4.查
get(index);
subList(from,to);
listIterator();

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

在迭代时,不可以通过集合对象的方法操作集合中的元素。
所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator方法是有限的。
只能对元素进行判断,取出,删除的操作。
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator.

该接口只能通过List集合的ListIterator方法获取。

List集合判断元素是否相同,依据的是元素的equals方法。
LinkedList:特有方法
getFirst();
getLast();

removeFirst();
removeLase();

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

在JDK1.6出现了替代方法。
offerFirst();
offerLast();

peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会出现null。

pollFirst();
pollFirst()
获取元素,但是元素被删除。如果集合中没有元素,会出现null。
-------------------------------------------------------------------------------------------------
Set集合的功能和Collection是一致的。
     |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
        |--HashSet:底层是数据结构是哈希表。线程是非同步的。再往Haset里面存数据过程中,
                   首先比较的是数据对象的对应值,若它们的值是否相同。若值相同,就会进
                    一步比较是否为同一个对象, 若对象不一样,依然会存入;若对象一样,
                   则不再存入。就不再 存入此数据(数据的唯一性)。若存入的数值不一样,
                   就会存入。它接下来的操作就是比较对象,要是对象一样,就不在存入.
                   保证元素唯一性的原理:判断元素的hashCode值是否相同。
                   如果相同,还会继续判断元素的equals方法,是否为true。
                                                  
                  
         HashSet是如何保证元素唯一性的呢?(参考:HashSetTest01)
         是通过元素的两个方法,hashCode和equals来完成。
         如果元素的HashCode值相同,才会判断equals是否为true;
         如果元素的hashcode值不同,不会调用equals.
                                                      
         注意:对于判断元素是否存在,以及删除等操作,依赖的方法时元素的hashcode和equals方法。     -------------------------------------------------------------------------------------------------                             
        |--TreeSet:可以对Set集合中的元素进行排序。
                   底层数据结构是二叉树。
                   保证元素唯一性的依据:CompareTo()方法return 0;
        TreeSet排序的第一种方式:
           让元素自身具备比较性。元素需要实现Comparable接口,覆盖comparaeTo方法。
        这种方式成为元素的自然顺序,或者叫做默认顺序。
               
        TreeSet的第二种排序方式:
           当元素自身不具备比较性时, 或者具备的比较性不是所需要的。这时需要让集
        合自身具备比较性。在集合初始化时,就有了比较方式。
              
        当两种排序都存在时,以比较器为主。  
        定义一个类,实现Comparator接口,覆盖compare方法。         

        记住,排序时,当主条件相同时,一定要判断一下次要条件。

           当元素自身不具备比较性,或者具备的比较性不是所需要的。这个时候要让容器自身具备比较性。        定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
-----------------------------------------------------------------------
1.什么是迭代器呢?
它就是集合的取出元素的方式:Iterator()
  格式一:
  Iterator it = obj.Iterator();
     while(it.hasNext()){ //遍历数组
           System.out.println(it.next());
     }
   格式二:(与格式一相比,运行时节省内容空间)
   for(Iterator it = obj.Iterator();it.hasNext();){
           System.out.println(it.next());
    }
                        
--------------------------------------------------------------------
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。

1.泛型的好处:
  1.1 将运行时期出现的问题ClassCastException,转移到了编译时期。
     方便与程序员解决问题,让运行时期问题减少,安全。  
  1.2避免了强制转换的麻烦。

2.泛型格式:
通过<>来定义要操作的引用数据类型。
通常在集合框架中很常见,只要见到<>就要定义泛型。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
--------------------------------------------------------------------
泛型类
1.什么时候定义泛型类?
早期定义Object未完成扩展。
现在定义泛型来完成扩展。

2.泛型类定义的泛型,在整个类中有效。
如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。

3.泛型类中的特殊之处:
静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

4.泛型限定是用于进行泛型扩展用的。
  ?:通配符。也可以理解为占位符。

5.泛型的限定:
   ?    extends E:本行代码的意思是可以接受E类型或者E的子类。上限。
   ?    super   E:本行代码的意思是可以接受E类型或者E的父类型。下限。

1 个回复

倒序浏览
666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马