黑马程序员---java集合框架之类集图与TreeSet排序
2013-05-26 19:58
316 查看
------- android培训、java培训、期待与您交流! ----------
学习一个体系,首先从最顶层开始学起。例如集合框架,整个框架体系,应该先学习Collection的共性操作。集合类的特点是,可以用来存储对象并且是长度可变的容器,可以存储不同的对象。而数组是初始化即固定长度的。
先看看集合框架的整个框架图:
由上图可以看出来,Collection下有两个子接口,一个是List,另外一个是Set。
其中List是有序的序列,允许元素的重复。
Set是无序序列,不允许有元素相同。她们都实现了Collection接口。
ArrayList:底层是数组结构,查询快,增删慢,不同步。
LinkedList:底层是链表结构,增删快,查询慢,不同步
Collection中的共性方法主要有:
1.添加:
add方法的参数类型是Object。以便于接收任意类型对象。
集合中存储的都是对象的引用(地址)
boolean add(Object obj);
boolean addAll(Collection coll);
2.删除://会改变集合的长度。
boolean remove(Object obj);
boolean removeAll(Collection coll);//将两个集合中的相同元素从调用removeAll的集合中删除。
void clear();//将集合清空。注意:集合还在。
3.判断:
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean isEmpty();//判断集合是否为空
4.获取:
int size();
Iterator iterator();//取出元素的方式:迭代器。
迭代器:专门用于取出集合中元素的方式。
5.其他:
boolean retainAll(Collection coll);//取交集。
Object[] toArray();//将集合转成数组。
HashSet:
底层是哈希表,线程不同步,无序、高效。HashSet是通过元素的hashcode和eauals方法来保证元素的唯一性的。如果hashcode值相同,则继续判断equals方法的结果。如若hashcode值不同,则不会调用euqals方法。
TreeSet:底层是二叉树,可对元素进行排序,默认是自然顺序。通过Comparable接口的compareTo方法return
0来保证元素的唯一性。
TreeSet有两种排序方式:
第一种:使要排序的元素具备比较性,这时需要被比较的元素实现comparable接口。并复写其中的compareTo方法。这种方式也成为元素的自然顺序排序。
第二种:使集合在初始化后,集合自身具备比较性。即通过TreeSet的构造方法传入一个比较器。该比较器实现Comparator接口,并实现其中的compare方法。
分别使用两种不同的排序方式的TreeSetzonghe代码示例:
如果两种比较方式都存在的话,以比较器的比较方式为主。
Map集合
Map集合下主要有HashMap和TreeMap。
学习一个体系,首先从最顶层开始学起。例如集合框架,整个框架体系,应该先学习Collection的共性操作。集合类的特点是,可以用来存储对象并且是长度可变的容器,可以存储不同的对象。而数组是初始化即固定长度的。
先看看集合框架的整个框架图:
由上图可以看出来,Collection下有两个子接口,一个是List,另外一个是Set。
其中List是有序的序列,允许元素的重复。
Set是无序序列,不允许有元素相同。她们都实现了Collection接口。
ArrayList:底层是数组结构,查询快,增删慢,不同步。
LinkedList:底层是链表结构,增删快,查询慢,不同步
Collection中的共性方法主要有:
1.添加:
add方法的参数类型是Object。以便于接收任意类型对象。
集合中存储的都是对象的引用(地址)
boolean add(Object obj);
boolean addAll(Collection coll);
2.删除://会改变集合的长度。
boolean remove(Object obj);
boolean removeAll(Collection coll);//将两个集合中的相同元素从调用removeAll的集合中删除。
void clear();//将集合清空。注意:集合还在。
3.判断:
boolean contains(Object obj);
boolean containsAll(Collection coll);
boolean isEmpty();//判断集合是否为空
4.获取:
int size();
Iterator iterator();//取出元素的方式:迭代器。
迭代器:专门用于取出集合中元素的方式。
5.其他:
boolean retainAll(Collection coll);//取交集。
Object[] toArray();//将集合转成数组。
HashSet:
底层是哈希表,线程不同步,无序、高效。HashSet是通过元素的hashcode和eauals方法来保证元素的唯一性的。如果hashcode值相同,则继续判断equals方法的结果。如若hashcode值不同,则不会调用euqals方法。
TreeSet:底层是二叉树,可对元素进行排序,默认是自然顺序。通过Comparable接口的compareTo方法return
0来保证元素的唯一性。
TreeSet有两种排序方式:
第一种:使要排序的元素具备比较性,这时需要被比较的元素实现comparable接口。并复写其中的compareTo方法。这种方式也成为元素的自然顺序排序。
第二种:使集合在初始化后,集合自身具备比较性。即通过TreeSet的构造方法传入一个比较器。该比较器实现Comparator接口,并实现其中的compare方法。
分别使用两种不同的排序方式的TreeSetzonghe代码示例:
package com.itheima; /** * 使用TreeSet排序方式中的使元素自身具备比较性。 * Student实现Comparable接口,并实现其中的compareTo方法。 * * @author wu * */ public class Student implements Comparable<Student> { private String name; private int age ; public Student(String name, int age) { // TODO Auto-generated constructor stub this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student o) { // TODO Auto-generated method stub //定义一个num接受判断年龄后返回的数值。 //方便于双重判断,当年龄一样时,再判断姓名是否相同。 //当都相同时,确定为同一个元素。 int num = new Integer(this.getAge()).compareTo(new Integer(o.getAge())); if (num == 0) { return this.getName().compareTo(o.getName()); } return num; } }
package com.itheima; import java.util.Comparator; /** * 使用TreeSet排序方式中的 试集合自身具备比较性,通过TreeSet的构造方法 * 接收一个比较器对象。 该比较器实现Comparator接口。 * 并实现其中的compare方法。 * * @author wu*/ public class MyComp implements Comparator<Student> { @Override public int compare(Student stu1, Student stu2) { // TODO Auto-generated method stub //定义一个num接受判断年龄后返回的数值。 //方便于双重判断,当年龄一样时,再判断姓名是否相同。 //当都相同时,确定为同一个元素。 int num = new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge())); if (num == 0) { return stu1.getName().compareTo(stu2.getName()); } return num; } }
package com.itheima; import java.util.Comparator; /** * 使用TreeSet排序方式中的 试集合自身具备比较性,通过TreeSet的构造方法 * 接收一个比较器对象。 该比较器实现Comparator接口。 * 并实现其中的compare方法。 * * @author wu*/ public class MyComp implements Comparator<Student> { @Override public int compare(Student stu1, Student stu2) { // TODO Auto-generated method stub //定义一个num接受判断年龄后返回的数值。 //方便于双重判断,当年龄一样时,再判断姓名是否相同。 //当都相同时,确定为同一个元素。 int num = new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge())); if (num == 0) { return stu1.getName().compareTo(stu2.getName()); } return num; } }
package com.itheima; import java.util.Iterator; import java.util.TreeSet; public class TreeSetTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //使集合自身具备比较性的TreeSet排序方式 TreeSet<Student> ts = new TreeSet<Student>(new MyComp()); ts.add(new Student("lisi03...Comp... ",35)); ts.add(new Student("lisi12...Comp... ",23)); ts.add(new Student("lisie...Comp... ",78)); ts.add(new Student("lisigy...Comp... ",12)); ts.add(new Student("lisity...Comp... ",23)); ts.add(new Student("lisii2...Comp... ",23)); Iterator<Student> it = ts.iterator(); System.out.println("使集合自身具备比较性:"); while (it.hasNext()) { Student student = it.next(); System.out.println(student.getName()+"..."+student.getAge()); } //----------------------------------------------------------------------- //使元素自身具备比较性的TreeSet排序方式 TreeSet<Student> ts1 = new TreeSet<Student>(); ts1.add(new Student("lisi03 ",35)); ts1.add(new Student("lisi12 ",23)); ts1.add(new Student("lisie ",78)); ts1.add(new Student("lisigy ",12)); ts1.add(new Student("lisity ",23)); ts1.add(new Student("lisii2 ",23)); Iterator<Student> it1 = ts1.iterator(); System.out.println("使要比较的元素自身具备比较性:"); while (it1.hasNext()) { Student student = it1.next(); System.out.println(student.getName()+"..."+student.getAge()); } } }
如果两种比较方式都存在的话,以比较器的比较方式为主。
Map集合
Map集合下主要有HashMap和TreeMap。
相关文章推荐
- 黑马程序员-----OC学习之类的继承和多态
- 黑马程序员--OC之类的封装继承多态使用技巧
- 黑马程序员——java集合框架——List接口
- java集合框架的练习之TreeSet集合的运用
- 黑马程序员——Java集合框架(一)之迭代器、Collection层次结构等
- 黑马程序员——java集合框架(Map和工具类)
- 黑马程序员-Java集合框架
- 黑马程序员_Java集合框架
- 黑马程序员——Java集合框架—Set
- 黑马程序员-Java集合框架Set
- 黑马程序员_java集合框架2
- 黑马程序员——面对对象之类的定义和使用
- 黑马程序员_日记30_Java集合框架概述
- 黑马程序员--Java集合框架(二)
- 黑马程序员__Java集合框架Map集合
- 黑马程序员—JAVA高新技术之类加载器、动态代理
- 黑马程序员——Java集合框架—Queue—BlockingQueue
- 黑马程序员_java集合框架
- 黑马程序员_java基础之类加载器解析
- 黑马程序员—Java集合框架(LinkedList)