------- android培训、java培训、期待与您交流!
1.什么是集合类:用于存储对象
出现原因:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象常用的一种方式。
2.数组和集合区别:
数组:存储基本数据类型,长度固定。
集合:只能存储对象,可以存储不同类型的对象,长度是可变的,
3..集合框架的概念:
集合是一个容器,而这些容器对于对象数据都有自己的存储结构,根据不同数据结构对应不同的集合类,而又将这些集合共性的部分不断向上抽取,这样构成的体系称为集合框架。
4.集合框架的构成和基本集合类:
Collection是根接口
-List:元素是有序的,元素可以重复,集合体系有索引。根据存储数据结构不同进行划分。
ArrayList:底层使用数组数据结构;具有基本的数据操作,增、删、改、查;特点是查询速度很快,但是增删稍慢。可以通过迭代器和元素角标来对数据元素进行遍历。
LinkedList:底层数据结构是链表结构。同样具备增、删、改、查数据操作。增删速度很快,查询稍慢
Vector:底层是数组数据结构,实现同步的,但是效率没ArrayList快,被其替代。枚举是它的特有取出方式,被迭代器取代。
-Set:元素是无序的(存入和取出的顺序不一定一致,元素不可以重复)
HashSet:底层数据结构式哈希表。线程是非同步的。
HashSet如何保证元素唯一性呢?
通过元素的两个方法,hashCode和equals来完成如果元素的HashCode值相同,才会判断equals是否为true。如果元素的HashCode值不同,不会调用equals。
TreeSet:底层数据结构式二叉树,保证元素唯一性的依据。可以对Set集合中的元素进行排序。存的对象具备比较性。
TreeSet排序的第一种方式,让元素自身具备比较性。元素需要实现Compareable接口,覆盖compareTo方法。
TreeSet 第二种排序方式。当元素自身不具备比较性时,需要容器本身具备比较性,定义了比较器,将对象传递给TreeSet的构造函数。
5.TreeSet的应用实例
//TreeSetDemo对TreeSet的演示。
//学生类实现Comparable接口,对compareTo方法重写
import java.util.*;
class Student implements Comparable
{
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;
}
//重写Comparable中的compareTo 方法,对象存储时自定义的比较方法
public int compareTo(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("不是学生对象");
Student s=(Student)obj;
// System.out.println(this.age+"---"+s.age);
if(this.age<s.age)
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);
return -1;
}
}class TreeSetDemo{ public static void main(String[] args) { TreeSet<Student> ts=new TreeSet<Student>(); //定义treeset类并传入比较器对象。 TreeSet<Student> ts2=new TreeSet<Student>(new Mycompare()); ts.add(new Student("java01",22)); ts.add(new Student("java02",19)); ts.add(new Student("java0234",19)); ts2.add(new Student("java999",11)); ts2.add(new Student("java88",12)); ts2.add(new Student("ja88",12)); Iterator it=ts.iterator(); Iterator it2=ts2.iterator(); while(it.hasNext()) { Student s=(Student)it.next(); System.out.println(s.getName()+"--"+s.getAge()); } while(it2.hasNext()) { Student s=(Student)it2.next(); System.out.println(s.getName()+"--"+s.getAge()); } }}//通过定义比较器来实现具备比较性。class Mycompare implements Comparator{ //重写comparetor的compare方法,两个比较对象 public int compare(Object b1,Object b2) {
Student s1=(Student)b1; Student s2=(Student)b2; int num=s1.getName().compareTo(s2.getName()); if(num==0) { return ((Integer)s1.getAge()).compareTo(new Integer(s2.getAge())); } return num; }}