------- android培训、java培训、期待与您交流! ----------
集合类
1、集合存储:
数据多了就用对象来储存,对象多了就用集合来储存。
2、集合:面向对象语言对事物的体现都是以对象的形式来表象的,
所以为了方便对多个对象的操作,就对对象进行了储存,集合就是储存对象最常用的一种方式。
3、数组和集合类同样都是容器:
数组和集合类的不同;
数组虽然可以储存对象,但是长度是固定的,不可以改变长度,
集合的长度是可以改变的,
数组中可以储存基本的数据类型,但是集合中只能储存对象。
4、集合类的特点:
只用于储存对象,长度可以变化,集合储存不同类型的对象,
collection
list set
collection的常用方法:
Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);
2,删除
remove(e);
removeAll(collection);
clear();
3,判断。
contains(e);
isEmpty();
4,获取
iterator();
size();
5,获取交集。
retainAll();
6,集合变数组。
toArray();
ArrayList LinkedList vector HashSet TreeSet
形成这种结构的原因是因为不断地向上提取共性的东西而提取出来的,
出现这么多类型容器的原因是因为每一种的容器都用于储存不同的对象,也就是说它自身的储存方式不同。
而这种不同的储存方式称为数据结构。
5、add方法的参数类型是Object以便接受任意类型的对象。
6、集合中储存的都是对象的引用(地址)
7、迭代器:Iterator it = al.iterator();//获取迭代器,去除集合中的元素。
8、什么是迭代器:就是集合去除元素的一种方式。
9、迭代器的原理:就是把取出的方式定义在集合的内部,这样的取出方式就变成了内部类了,然后就可以直接的
访问集合内部的元素了。因为每一个容器的数据结构不相同,但是都有共性的方法,判断和取出,把这些共性的方法
都提取出来,内部类都符合一个规则就是返回的类型是Iterator,如何获取集合的取出对象,是通过对外提供的方法
iterator();来实现的。
10、Collection
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj)//获取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
11、 ArrayList底层的数据结构使用的是数组结构,查询快但是增加删除慢。
LinkedList底层使用的是链表的数据结构,查询慢 但是增加删除快。
vector底层使用的是数组的数据结构。
ArrayList是不同步的,而vector是同步的。
12、vector中最特别的方法是elements
其实枚举和迭代器的方法是一样的,枚举的名称和方法都过长,枚举后来就被迭代Iterator而取代。
13、LinkedList 链表结构。
其中特有的方法有:
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
15、List判断元素是否相同,依据的是元素的equals方法。
equals代码:
public boolean equals(Object obj)
{
if(obj instanceof Person)
{
return false;//此处也可以抛出异常
}
Person person = (Person)Obj;//进行强制转换
return this.name.equals(person.name) && this.age == person.age; //比较
}
16、Set:元素是无序,元素不可以重复。
Set的功能和collection的功能是一致的
|——HashSet底层的数据结构是哈希表
|——TreeSet
Set结合只有一种的取出方法就是迭代器
注意:对于判断元素是否存在 以及删除等操作,依赖的方法是Hashcode和equals方法,两个方法必须存在
方法如下:
equals代码:
public boolean equals(Object obj)
{
if(obj instanceof Person)
{
return false;//此处也可以抛出异常
}
Person person = (Person)Obj;//进行强制转换
return this.name.equals(person.name) && this.age == person.age; //比较
}
HashCode代码:
public int hashCode()
{
System.out.println(this.name+"....hashCode");
return name.hashCode()+age*37;
}