·当需要把一个对象放入 TreeSet 中,重写该对象对应的 equals() 方法时,应保证该方法与 compareTo(Object obj) 方法有一致的结果:如果两个对象通过 equals() 方法比较返回 true,则通过 compareTo(Object obj) 方法比较应返回 0
·TreeSet的自然排序是根据集合元素的大小,进行元素升序排列。如果需要定制排序,比如降序排列,可通过Comparator接口的帮助。需要重写compare(T o1,T o2)方法。
·利用int compare(T o1,T o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
·要实现定制排序,需要将实现Comparator接口的实例作为形参传递给TreeSet的构造器。
·此时,仍然只能向TreeSet中添加类型相同的对象。否则发生ClassCastException异常。
·使用定制排序判断两个元素相等的标准是:通过Comparator比较两个元素返回了0。
Map接口
·Map与Collection并列存在。用于保存具有;映射关系的数据:Key-Value
·Map中的Key和value都可以是任何引用类型的数据
·Map中的key用Set来存放,不允许重复,即同一个Map对象所对应的类,须重写hashCode()和equals()方法。
·常用String类作为Map的“键”
·key和value之间存在单向一对一关系,即通过制定的key总能找到唯一的、确定的value。
Map常用方法
·添加、删除操作:
Object put(Object key,Object value)
Object remove(Object key)
void putAll(Map t)
void clear()
·元视图操作的方法:
Set keySet()
Collection values()
Set entrySet()
·元素查询的操作:
Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
boolean equals(Object obj)
Map实现类之一:HashMap
·Map接口的常用实现类:HashMap、TreeSet和Properties。
·HashMap是Map接口使用频率最高的实现类。
·允许使用null键和null值,与HashSet一样,不保证映射的顺序
·HashMap判断两个key相等的标准是:两个Key通过equals()方法返回true,hashCode值也相等。
·HashMap判断两个value相等的标准是: 两个value通过equals()方法返回true。
Map实现类之二:LinkedHashMap
·LinkedHashMap是HashMap的子类
·与LinkedHashSet类似,LinkedHashMap可以维护Map的迭代顺序:迭代顺序:迭代顺序与Key-Value对的插入顺序一致
Map实现类之三:TreeMap
·TreeMap存储Key-Value对时,需要根据Key-value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态。
·TreeMap的Key的排序:
自然排序:TreeMap的所有Key必须实现comparable接口,而且所有的Key应该是同一个类的对象,否则将会抛出ClassCastException
定制排序:创建TreeMap时,传入一个comparator对象,该对象负责对TreeMap中的所有key进行排序。此时不需要Map的Key实现Comparable接口
·TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0.
·若使用自定义类作为TreeMap的Key,所属类需要重写equals()和hashCode()方法,且eqauls()返回true时,compareTo()方法应返回0。
Map实现类之四:hashtable
·Hashtable是个古老的Map实现类,线程安全。
·HashMap不同,Hashtable不允许使用null作为key和value
·与HashMap一样,Hashtable也不能保证其中Key-Value对的顺序
Hashtable判断两个key相等、两个value相等的标准,与HashMap一直。
Map实现类之五:Properties
·Properties类是Hashtable的子类,该对象用于处理属性文件
·由于属性文件里的key、value都是字符串类型,所以Properties里的key和value都是字符串类型。
·存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法
例:
Properties pros = new Properties();
pros.load(new FileInputStream("jdbc.properties"));
String user = pros.getProperty("user");
System.out.println(user);
操作集合的工具类:Collections
操作数组的工具类:Arrays
·Collections是一个操作Set、List和Map等集合的工具类
·Collection中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。
·排序操作:(均为static方法)
reverse(List):反转List中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List集合元素按升序排序
sort(List,Comparator):根据指定的Compareator产生的顺序对List集合元素进行排序
swap(List,int,int):将指定list集合中的i处元素和j处元素进行交换
·Object max(Collection):根据元素的自然顺序,返回给指定集合中的最大元素
·Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
·Object min(Collection)
·Object min(Collection,Comparator)
·int frequency(Collection,Object):返回指定集合中指定元素的出现次数
·void copy(List dest,List src):将src中的内容复制到dest中
·boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List对象的所有旧值
同步控制
·Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题