现在的位置: 首页 > 综合 > 正文

黑马程序员–11集合类的学习List&Hash&Array)Set&泛型

2018年05月11日 ⁄ 综合 ⁄ 共 2596字 ⁄ 字号 评论关闭

------- android培训java培训、期待与您交流! ---------- 

集合是用来存储对象的。

数组和集合类的异同?

           数组虽然也可以存储对象,但长度是固定的,集合长度是可变的,数组智能光

            可以存储基本数据类型,集合只能存储对象。

集合类的特点:

           集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

由于每一个容器对数据的存储方式都有不同,所以才会出现这么多的容器,这个存储方式称之为:数据结构。

   List派系-------------------------------------------------------------------

1,add方法的参数类型是Object。以便于接收任意类型的对象。
2,集合中存储的都是对象的引用(地址)

什么是迭代器呢?
其实就是集合的取出元素的方式。
Iterator:
 把取出方式定义在集合的内部。
 这样取出方式就可以直接访问集合内容的元素。
 那么取出方式就被定义成了内部类。
 而每一个容器的数据结构不同,
 所以取出的动作细节也不一样。但是都有共性内容判断和取出。那么可以将写共性抽取。就是iterator()

如:

 /*Iterator it=al.iterator();//获取迭代其,取出集合中的元素。
  while(it.hasNext()){
   sop(it.next());
  }*/
  for(Iterator it=al.iterator();it.hasNext();){//for循环好一些,it在for循环中用完就释放了,对于内存比较好。
   sop(it.next());
  }

Collection
    |--List:元素是有序的,元素可以重复,因为该集合体系有索引
         |--ArrayList:底层的数据结构使用的是数组结构。特点:查询数度很快,但是增删稍慢。
         |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。
         |--Vector:底层是数组数据结构,线程同步,被ArrayList替代了。

   |--Set:元素是无序的,元素不可以重复。

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


 add(index,element)
 addAll(index,Collection)

 remove(index)

 set(index,element)

 get(index)
 subList(from,to)
 listIterator();

 

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

在迭代时,不可以通过集合对象的方法操作集合中的元素,
会发生 java.util.ConcurrentModificationException异常。

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

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

 

枚举就是Vector特有的取出方式。
发现枚举和迭代器很像
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。

 

LinkedList的特点
addFirst();
addLast();

getFirst();
getLast();
获取元素,但不删除元素。

removeFirst();
removeLast();
获取元素,删除元素。如果集合中没有元素,会出现NoSuchElementException

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

offerFirst();
offerLast();

peekFirst();
peekLast();

pollFirst();
pollLast();

Set派系:-----------------------------------------------------------------------------------
 

|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
 |--HashSet:底层数据结构是哈希表。
   HashSet是如何保证元素唯一性的呢?
   是通过元素的两个方法,hashCode和equals来完成。
   如果元素的HashCode值相同,才会判断equals是否为true。
   如果元素的HashCode值不同,不会调用equals。

   注意,对于判断元素是否存在以及删除等操作,依赖的方法是元素的hashCode和equals方法。

 |--TreeSet:
Set集合的功能和Collection是一致的

Set:无序,不可以重复。
 |--HashSet:数据结构是哈希表。线程是非同步的。
    保证元素唯一性的原理:判断元素的hashCode值是否相同。
    如果元素的HashCode值相同,才会判断equals是否为true。
 |--TreeSet:可以对Set集合中的元素进行排序。
    底层数据结构是二叉树。
    保证元素唯一性的依据:compareTo方法return 0。
    
    TreeSet排序的第一种方法:让元素自身剧本比较性,
    元素需要实现Comparable接口,覆盖cimpareTo方法。
    这种方式也成为元素的自然顺序,或者叫做默认顺序。
 

 

泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个安全机制。

好处:
1.将运行时期出现问题ClassCastException,转义到了编译时期,
方便于程序员解决问题,让运行事情问题减少,安全.

2,避免了强制转换麻烦。

泛型格式:通过<>来定义要操作的引用数据类型。

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见。
只要见到<>就要定义泛型。

其实<>就是用来接收类型的。

当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

 

------- android培训java培训、期待与您交流! ----------  详细请查看:http://edu.csdn.net/heima/

抱歉!评论已关闭.