集合类复习
来源:互联网 发布:云影源码1llo 编辑:程序博客网 时间:2024/06/05 16:49
Comparable:一般的javabean都会实现,用于排序。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。
Comparator:外部比较器,使用场景:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
public class CompareTest { public static void main(String args[]) { Domain d1 = new Domain("enzo",12); Domain d2 = new Domain("peekaboo",12); Domain d3 = new Domain("bamboo",15); Domain d4 = new Domain("carter",16); System.out.println(d1.compareTo(d2)); DominComparator comparator = new DominComparator(); System.out.println( comparator.compare(d1, d3) ); TreeMap<Domain, String> map = new TreeMap<Domain, String>(comparator); map.put(d1,"d1"); map.put(d2,"d2"); map.put(d3,"d3"); map.put(d4,"d4"); System.out.println(map.firstKey()); System.out.println(map.lastKey()); Set<Entry<Domain, String>> set = map.entrySet(); Iterator<Entry<Domain, String>> it = set.iterator(); while(it.hasNext()) { Entry<Domain, String> entry = it.next(); System.out.println(entry.getKey()+" -- "+entry.getValue()); } }}//外比较器,自定义比较规则class DominComparator implements Comparator<Domain> { public int compare(Domain o1, Domain o2) { if(o1.getName().compareToIgnoreCase(o2.getName())>0) { return 1; } else if(o1.getName().compareToIgnoreCase(o2.getName())<0) { return -1; } else { if(o1.getAge()-o2.getAge()>0) { return 1; } else if(o1.getAge()-o2.getAge()<0) { return -1; } else { return 0; } } }}//内比较器,一般的Javabean都要实现该接口,然后就可以添加进排序的集合类class Domain implements Comparable<Domain>{ private String name; private int age; public Domain(String name,int age) { this.name = name; this.age = age; } //省略getter、setter public int compareTo(Domain p) { if(this.getName().compareTo(p.getName())>0) { return 1; } else if(this.getName().compareTo(p.getName())<0) { return -1; } else { //当两个人的姓名相同时,对年龄进行排序 if(this.getAge()-p.getAge()>0) { return 1; } else if(this.getAge()-p.getAge()<0) { return -1; } else { return 0; } } } @Override public String toString() { return "Domain [name=" + name + ", age=" + age + "]"; }}
Collection是集合接口
|————Set子接口:无序,不允许重复。
|————List子接口:有序,可以有重复元素。
Set
|————HashSet:以哈希表的形式存放元素,插入删除速度很快。
|————TreeSet:以二叉树排序形式存放元素,有序的获取元素。
List
|————ArrayList:动态数组,非同步
|————LinkedList:链表、队列、堆栈,非同步。
|————Vector:动态数组,同步的。子类:———– |Stack :栈,同步的。
|
TreeMap和HashMap:
“集合框架”提供两种常规的 Map实现:HashMap和TreeMap (TreeMap实现SortedMap接口)。
在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义
顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和
equals()的实现。
HashMap和HashTable:
1). HashMap支持null值和一个null键;HashTable不支持;
2 ) . HashTable是同步的;HashMap可以通过Collections.synchronizedMap(hashMap)达到同步。
fail-fast:快速失败机制(一种错误检测机制),指程序在对集合使用迭代器迭代时,如果有操作对集合结构进行改变,则会尽可能地抛出异常。可以简单地认为java.util包下的集合类都是快速失败机制。
safe-fase:安全失败机制,指程序在对集合使用迭代器迭代时,即使有操作对集合结构进行改变,也不会抛出异常。因为对该集合进行迭代时,在底层对原集合进行了拷贝。可以简单地认为java.util.concurrent(并发包)包下的集合类都是安全失败机制。
- 集合类复习
- java复习笔记---集合类
- 集合复习
- 集合复习
- 集合复习
- 复习集合
- 集合复习
- 集合复习
- 集合复习
- 黑马程序员——集合类复习
- 集合框架复习
- JAVA复习之集合~~
- java集合复习转载
- 复习集合的文章
- Java集合框架复习
- 集合复习,深入理解
- Set 集合复习
- List集合基础复习
- LeetCode#238. Product of Array Except Self
- 面向对象程序设计概论
- iOS 数组/字典转json
- zookeeper+kafka
- GDI
- 集合类复习
- Lintcode——两数之和
- 【tarjan】17.6.1 仙人球 题解
- shell 数组 循环
- 群辉
- 1002. A+B for Polynomials (25)
- bzoj1455:罗马游戏(左偏树)
- FFmpeg:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)——雷神神文
- 动态代理的一个比较优雅的实例