黑马程序员-----集合框架知识小节1(第一篇)

时间:2021-01-21 19:22:41

------- 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;       }}