对Collection集合的一点认识
来源:互联网 发布:mac内存清理软件 编辑:程序博客网 时间:2024/05/16 11:28
List集合判断元素是否相同,依据是元素的equals方法(需要覆写equals方法)。
例如下面代码对equals方法的覆写:
class Person14{private String name;private int age;Person14(String name,int age){this.name = name;this.age = age;}public boolean equals(Object obj){if(!(obj instanceof Person14))return false;Person14 p = (Person14)obj;//System.out.println(this.name+"....."+p.name);return this.name.equals(p.name) && this.age == p.age;}/**/public String getName(){return name;}public int getAge(){return age;}}class ArrayListTest2 {public static void sop(Object obj){System.out.println(obj);}public static void main(String[] args) {ArrayList al = new ArrayList();al.add(new Demo());al.add(new Person14("lisi01",30));al.add(new Person14("lisi02",32));al.add(new Person14("lisi04",35));al.add(new Person14("lisi03",33));sop("remove 03 :"+al.remove(new Person14("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。Iterator it = al.iterator();while(it.hasNext()){Person14 p = (Person14)it.next();sop(p.getName()+"::"+p.getAge());}}public static ArrayList singleElement(ArrayList al){//定义一个临时容器。ArrayList newAl = new ArrayList();Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(!newAl.contains(obj))newAl.add(obj);}return newAl;}}
Set:无序,不可以重复元素。
|--HashSet:数据结构是哈希表。线程是非同步的。
保证元素唯一性的原理:判断元素的hashCode值是否相同。
如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
实现Comparator接口,覆盖Comparator接口里面的CompareTo方法,让元素自身具有比较性
HashSet代码:
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");return name.hashCode()+age*37;}//覆写equals方法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;}}
TreeSet代码:
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));//ts.add(new Student("lisi007",20));//ts.add(new Student("lisi01",40));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){//return 0;if(!(obj instanceof Student))throw new RuntimeException("不是学生对象");Student s = (Student)obj;System.out.println(this.name+"....compareto....."+s.name);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;}}
0 0
- 对Collection集合的一点认识
- 对Final的一点认识
- 对Final的一点认识
- 对项目的一点认识
- 对maven的一点认识
- 对MongoDB的一点认识
- 对堆栈的一点认识
- 对readResolve的一点认识
- 对线程的一点认识
- 对DLL的一点认识
- 对QT的一点认识
- 对嵌入式的一点认识
- 对ContentProvider的一点认识
- 对集合的一点理解
- 对extern "C"的一点小认识
- 我对Log4J的一点初认识
- 对extern "C"的一点小认识
- 对COCOMO II的一点粗浅认识
- iOS 多线程 锁 互斥 同步
- ReportStudio入门教程(八十一) - 下钻后负责人信息异常
- 小改进大奖励,大建议只鼓励
- 使用jOrgChart插件, 异步加载生成组织架构图
- Excel设置固定的打印表头
- 对Collection集合的一点认识
- 笑笑语法(语法糖):快速将OC中其他数据类型转换为对象.
- 菜鸟面试之路(二)
- C++设计模式之建造者模式(一)
- Jsp和servlet的编译过程、原理、区别
- 机器学习实战笔记7(Adaboost)
- 111111111111
- linux 操作命令
- OpenGLES demo - 16. 蒙板 Stencil