* 一 数组与集合都是存储对象的成员。集合中存储的是对象的引用(地址),
集合框架:用于表示和操作集合所规定的统一的标准的体系结构。
集合框架的三大结构:对外的接口 接口的实现和集合运算的算法
接口:即表示集合的抽象数据类型,接口提供了让我们对集合里类容单独操作的可能,
实现:就是集合框架中接口的具体实现,实际他们就是那些可以复用的数据接口
算法:算法是可以复用的函数。
二 什么是集合:把相同的一类的东西汇聚成一个整体就叫集合,
二 什么是集合框架
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
三 在集合框架的编译中会出项不安全的提醒,是在1.40版本后出现泛型所致,
四 Iterator()迭代器
迭代器就是集合取出元素的方式,他是以内部类的形式定义在集合中的。
他的基本方法 hasNext(),next(),remove();a1.iterator()是否还可以迭代,返回类型为boolean。a1.retainAll(a2);//所判断的元素的位置也必须相同。
迭代器就是集合取出元素的方式,他是以内部类的形式定义在集合中的。
他的基本方法 hasNext(),next(),remove();a1.iterator()是否还可以迭代,返回类型为boolean。a1.retainAll(a2);//所判断的元素的位置也必须相同。
*
*
* *五List 接口
*
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构动态数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
排序特点:先进先出(队列)
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
特有的获取元素的方式:emlements();
*
* *五List 接口
*
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构动态数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
排序特点:先进先出(队列)
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
特有的获取元素的方式:emlements();
* 1 特殊方法:可以对脚标进行操作的方法可以。
*
2
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查(获取方式)
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
*
2
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查(获取方式)
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
3
List集合特有的迭代器ListIterator。ListIterator是Iterator的子接口。
Iterator和ListIterator区别
Iterator:只能够进行取出 判断 删除
ListIterator:增加了修改 和添加
4 Vector : 线程安全,速度慢,他的数组延长模式是100%100延长。特殊方法:枚举是他特殊的取出方法,elements()。
其实枚举和迭代是一样的,只不过他的名称和方法名称都过长,
*
* 5:ArrayList: 创建时,默认情况下里面创建10个元素的长度的数组,当元素超过10以后会创建一个新的数组,
* 这个数组的长度是比以前数组的长度增加了50%。然后再把以前数组的元素添加到这个新数组里面来,
* 接着在把后面的元素添加到这个数组里面,
*
* 6 List和TreeSet相似的排序方式
*
* 六 练习
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:把这个容器里的数放入例外一个容器,放入每一个元素前先判断容器里面是否有相同的元素,有则不放。
List集合判断元素是否相同,依据是元素的equals方法。
List集合特有的迭代器ListIterator。ListIterator是Iterator的子接口。
Iterator和ListIterator区别
Iterator:只能够进行取出 判断 删除
ListIterator:增加了修改 和添加
4 Vector : 线程安全,速度慢,他的数组延长模式是100%100延长。特殊方法:枚举是他特殊的取出方法,elements()。
其实枚举和迭代是一样的,只不过他的名称和方法名称都过长,
*
* 5:ArrayList: 创建时,默认情况下里面创建10个元素的长度的数组,当元素超过10以后会创建一个新的数组,
* 这个数组的长度是比以前数组的长度增加了50%。然后再把以前数组的元素添加到这个新数组里面来,
* 接着在把后面的元素添加到这个数组里面,
*
* 6 List和TreeSet相似的排序方式
*
* 六 练习
将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
思路:把这个容器里的数放入例外一个容器,放入每一个元素前先判断容器里面是否有相同的元素,有则不放。
List集合判断元素是否相同,依据是元素的equals方法。
*/
public static void main(String[] args) {
ArrayList<Person> arrList = new ArrayList<Person>();
arrList.add(new Person(10));
arrList.add(new Person(10));
arrList.add(new Person(10));
arrList.add(new Person(20));
System.out.println(arrList);
System.out.println(arrList.remove(1));
System.out.println(arrList);
System.out.println(singleElement(arrList).size());
//测试ListIterator
ListIterator<Person> lit = arrList.listIterator();
lit.add(new Person(10));
System.out.println(arrList);
}
//创建一个去除一个ArrayList集合重复元素的方法,
public static List singleElement(List list){
ArrayList<Person> newArrr = new ArrayList<Person>();
Iterator<Person> it = list.iterator();
while(it.hasNext()){
Person p = it.next();
if(!(newArrr.contains(p)))
newArrr.add(p);
}
return newArrr;
}
}
public static void main(String[] args) {
ArrayList<Person> arrList = new ArrayList<Person>();
arrList.add(new Person(10));
arrList.add(new Person(10));
arrList.add(new Person(10));
arrList.add(new Person(20));
System.out.println(arrList);
System.out.println(arrList.remove(1));
System.out.println(arrList);
System.out.println(singleElement(arrList).size());
//测试ListIterator
ListIterator<Person> lit = arrList.listIterator();
lit.add(new Person(10));
System.out.println(arrList);
}
//创建一个去除一个ArrayList集合重复元素的方法,
public static List singleElement(List list){
ArrayList<Person> newArrr = new ArrayList<Person>();
Iterator<Person> it = list.iterator();
while(it.hasNext()){
Person p = it.next();
if(!(newArrr.contains(p)))
newArrr.add(p);
}
return newArrr;
}
}
class Person{
private int age;
public Person(int age){
this.age = age;
}
private int age;
public Person(int age){
this.age = age;
}
@Override//为什么要重载equals方法,是因为容器判断一个元素是否存在用的是equals。
public boolean equals(Object obj) {
if(!(obj instanceof Person))
return false;
Person other = (Person) obj;
return this.age == other.age;
}
}
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net