二)部分基本框架:
Collection
|-----List---:元素是有序的,元素可以重复。因为该集合体系有索引。
|----ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|----LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|----Vector:底层是数组数据结构。线程同步。被ArrayList替代了因为效率低。
|-----Set ---:Set集合的功能和Collection是一致的。元素是无序(存入和取出的顺序不一定一致),元素不可以重复,其存储顺序是按哈希值顺序。
|----HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|----TreeSet---:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:compareTo方法return 0。
TreeSet排序的第一种方式:让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式: 当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集
合自身具备比较性。在集合初始化时,就有了比较方式。定义一个类,实现Comparator接口,覆盖compare方法。
--------------------------华丽的分割线-----------------------------
示例1:
import java.util.*;
class CollectionDemo {
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
base_method();
sop("------------------");
method2();
sop("------------------");
method_get();
}
public static void base_method() {
// 创建一个集合容器,使用Collection接口的子类,ArrayList
ArrayList al = new ArrayList();
// 1.添加元素--->add(Object obj),多态
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
// 打印原集合
sop("原集合" + al);
// 3.删除元素
al.remove("java02");
// 清空集合中的元素
al.clear();
// 4.判断元素
// 判断集合中是否存在某个元素:contains()
sop("是否存在java03:" + al.contains("java03"));
// 判断集合是否为空:isEmpty()
sop("判断集合是否为空:" + al.isEmpty());
// 2.获取个数,集合长度
sop("size :" + al.size());
// 打印改变后集合
sop(al);
System.out.println("Hello World!");
}
public static void method2() {
// 创建另一个新集合
ArrayList at1 = new ArrayList();
at1.add("java01");
at1.add("java02");
at1.add("java03");
at1.add("java04");
// 打印原集合
sop("原集合at1:" + at1);
ArrayList at2 = new ArrayList();
at2.add("java01");
at2.add("java02");
at2.add("java05");
at2.add("java06");
sop("原集合at2:" + at2);
// removeAll()--->只保留和at2不相同的元素。
at1.removeAll(at2);
sop("remove后at1:" + at1);
sop("now集合at2:" + at2);
// 取两个集合的交集,at1中只保留交集的部分
at1.retainAll(at2);
sop("取完交集后的at1:" + at1);
}
public static void method_get() {
// 创建另一个新集合
ArrayList at1 = new ArrayList();
at1.add("java01");
at1.add("java02");
at1.add("java03");
at1.add("java04");
// 打印原集合
sop("原集合at1:" + at1);
// 获取迭代器,用于去除集合中的元素
Iterator it = at1.iterator();
while (it.hasNext()) {
sop(it.next());
}
}
}
TreeSet排序的第一种方式:实现Comparable接口,覆盖compareTo方法。
示例1:
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;
}
}
示例2:
TreeSet ts = new TreeSet(MyCompare);
class MyComart implements Comparator//定义一个类,实现Comparator接口,覆盖compare方法。
{
public int compare(Object o1,Object o2)//覆盖compare方法。
{
Student s1 = (Student)o1;
Student s2 = (Student)o2;
int num = s1.getName().compareTo(s2.getName());
if(num==0)
{
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));//比较年龄因为Intege已经具有比较性了.直接比就可以啦
/*
if(s1.getAge()>s2.getAge())
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
*/
}
return num;
}
}
---------------------- ASP.Net+Android+IO开发S、 .Net培训、期待与您交流! ----------------------