Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
Set集合的功能和Collection是一致的。
|--HashSet: 底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,
依赖的方法是元素的hashcode和equals方法。
注意:如果对象存进了HashSet集合以后,把对象的哈希值改变了,则对象不能从原来集合中取出或删除,有可能会造成内存泄露。
|--TreeSet:可以对set集合中的元素进行排序。底层数据结构是二叉树。
保证元素唯一性依据:conpareTo方法 return 0.
TreeSet排序第一种方式:
让元素自身具备比较性。元素需要实现ConpareTo方法。
也叫做自然顺序或者默认排序。
TreeSet的第二种排序方式:
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
当 两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
------------------------------------------------------------------------
list集合:
方法:
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
凡是可以操作角标的方法都是list体系特有的方法。
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
-------------------------------------------------------
LinkedList集合:
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
-----------------------------------------------------------------------
泛型:
泛型定义在方法上要放在返回值类型前面。
<?>表示任意类型。?占位符
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
静态方法不可以访问类上定义的泛型。因为类的泛型是要new对象的。静态不能访问非静态。
如果静态方法操作的应用类型不确定,可以将泛型定义在方法上。
------- android培训 、 java培训 、期待与您交流! ----------