---------------------- android培训、java培训、期待与您交流! ----------------------
1.Collection定义了集合框架的共性功能。
1,添加
add(e);
addAll(collection);
2,删除
remove(e);
removeAll(collection);
clear();
3,判断。
contains(e);
isEmpty();
4,获取
iterator();
size();
5,获取交集。
retainAll();
6,集合变数组。
toArray();
2. 迭代器是取出方式,会直接访问集合中的元素,所以将迭代器通过内部类的形式来进行描述,通过容器的iterator()方法获取该内部类的对象。
3. 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();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
List集合特有的迭代器ListIterator是Iterator的子接口。在Iterator迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。
4. LinkedList:特有方法:
addFirst(); addLast();
getFirst(); getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst(); removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst(); offerLast();
添加
peekFirst(); peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst(); pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
5. Set集合的功能和Collection是一致的。
6. HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
一般新建类时,要重写hashCode方法,hashCode的返回值一般与equals方法判定的属性值保持一致。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
示例:
class HashSetTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
Iterator it = hs.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName()+"::"+p.getAge());
}
}
}
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
System.out.println(this.name+"....hashCode");
//hash值要与参与判断的所有属性相关
return name.hashCode()+age*37;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
System.out.println(this.name+"...equals.."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
7. TreeSet可以对Set集合中的元素进行排序,他的底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0。当return 1时,按照存入数据顺序排序。.TreeSet排序有两种方法。第一种方法时让元素自身具备比较性。此时,自定义类需要实现Comparable(支持泛型)接口,覆盖compareTo方法。这种方式也成为元素的自然顺序,或者叫做默认顺序。第二种排序方法是当元素自身不具备比较性,或者具备的比较性不是所需要的时,就需要让集合自身具备比较性。在集合初始化时,想构造器中传入一个比较器。比较器要实现Comparator(支持泛型)接口,并重写compare(obj1,obj2)方法。当两种排序都存在时,以比较器为主。
自然排序示例:
public class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
ts.add(new Student("lisi02",22));
ts.add(new Student("lisi007",20));
ts.add(new Student("lisi09",19));
ts.add(new Student("lisi08",19));
Iterator it = ts.iterator();
while(it.hasNext())
{
Student stu = (Student)it.next();
System.out.println(stu.getName()+"..."+stu.getAge());
}
}
}
class Student implements Comparable//该接口强制让学生具备比较性。
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s = (Student)obj;
if(this.age>s.age)
return 1;
if(this.age==s.age)
{
return this.name.compareTo(s.name);
}
return -1; }
public String getName() {
return name; }
public int getAge() {
return age;
}}
自定义比较器示例:
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet ts = new TreeSet(new MyComparator());
ts.add(new Student("lisi02", 22));
ts.add(new Student("lisi007", 20));
ts.add(new Student("lisi09", 19));
ts.add(new Student("lisi08", 19));
Iterator it = ts.iterator();
while (it.hasNext()) {
Student stu = (Student) it.next();
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
}
class Student {
private String name;
private int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}}
class MyComparator implements Comparator {
@Override
public int compare(Object obj1, Object obj2) {
if (!((obj1 instanceof Student) && (obj2 instanceof Student))) {
new RuntimeException("不是学生对象");
System.exit(0);
}
int num;
Student per1 = (Student) obj1;
Student per2 = (Student) obj2;
if ((per1.getAge() - per2.getAge()) == 0)
num = per1.getName().compareTo(per2.getName());
else
num = per1.getAge() - per2.getAge();
return num; }}
---------------------- android培训、java培训、期待与您交流! ---------------------
-详细请查看:http://edu.csdn.net/heima