目录
Map接口
Map及其实现类的对比:
HashMap中元素的特点:
相关方法:
添加、修改操作:
删除操作:
元素查询的操作:
元视图操作的方法:
TreeMap的使用:
Properties类:
Collections工具类
常用方法:
排序操作
查找
复制、替换
添加
同步
Map接口
Map及其实现类的对比:
java.util.Map:存储一对一对的数据(key-value键值对,类似于数学上的函数)
实现类:HashMap(主要实现类)、LinkedHashMap(继承于HashMap)、TreeMap、Hashtable、Properties
HashMap:主要实现类。线程不安全的,效率高。可以添加null的key和value值。底层使用数组+单向链表+红黑树结构存储(jdk8)。
LinkedHashMap:是HashMap的子类。在数组+单向链表+红黑树结构的基础上,增加了双向链表,用于记录添加的元素的先后顺序。在遍历元素时,就可以按照添加的顺序显示。
TreeMap:底层使用红黑树结构存储。可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。需要考虑使用自然排序和定制排序。
Hashtable:古老实现类。线程安全的,效率低。不可以添加null的key或value值。底层使用数组+单向链表结构存储(jdk8)
Properties:是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。
HashMap中元素的特点:
HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。key所在的类要重写hashCode( )和equals( )方法。
HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。value所在的类要重写equals方法。
HashMap中的一对key-value,就构成了一个entry。Map中的entry是不可重复的、无序的。所有的entry就构成了一个Set集合。
相关方法:
添加、修改操作:
object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中。
void putAll(Map m):将m中的所有key-value对存放到当前map中。
删除操作:
Object remove(Object key):移除指定key的key-value对,并返回value。
void clear( ):清空当前map中的所有数据。
元素查询的操作:
Object get(Object key):获取指定key对应的value。
boolean containsKey(Object key):是否包含指定的key。
boolean containsValue(Object value):是否包含指定的value。
int size( ):返回map中key-value对的个数。
boolean isEmpty( ):判断当前map是否为空。
boolean equals(Object obj):判断当前map和参数对象obj是否相等。
元视图操作的方法:
Set keySet( ):返回所有key构成的Set集合。
Collection values( ):返回所有value构成的Collection集合。
Set entrySet( ):返回所有key-value对构成的Set集合。
TreeMap的使用:
底层使用红黑树结构存储。
可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。
需要考虑使用自然排序和定制排序。
要求添加进TreeMap集合中的key元素必须是同一个类型的。
定制排序的步骤与TreeSet中的一致:
User u1 = new User("李",19);
User u2 = new User("张",20);
User u3 = new User("刘",18);
User u4 = new User("宋",21);
Comparator cc = new Comparator()
{@Overridepublic int compare(Object o1, Object o2)//按年龄从大到小{if(o1 == o2){return 0;}if(!(o1 instanceof User && o2 instanceof User)){throw new RuntimeException("类型错误");}User uu1 = (User) o1;User uu2 = (User) o2;if(uu1.getAge() < uu2.getAge()){return 1;}else if(uu1.getAge() == uu2.getAge()){return 0;}else{return -1;}}
};
TreeMap tt = new TreeMap(cc);
tt.put(u1,111);
tt.put(u2,222);
tt.put(u3,333);
tt.put(u4,444);Iterator ii = tt.entrySet().iterator();
while(ii.hasNext())
{System.out.println(ii.next());
}
Properties类:
是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。
具体使用如下:
File ff = new File("info.properties");
System.out.println(ff.getAbsolutePath());Properties pp = new Properties();
try
{FileInputStream fff = new FileInputStream(ff);pp.load(fff);String name = pp.getProperty("name");String password = pp.getProperty("password");System.out.println(name + "\t" + password);
} catch (FileNotFoundException e)
{throw new RuntimeException("NO");
} catch (IOException e)
{throw new RuntimeException("NO");
}
将key值name和password存储在文件“info.properties”中,要对整个代码中的name和password进行修改时,只需要对文件中的二者进行修改即可。
文件“info.properties”:
文件中等于号两边不能出现空格,否则会将空格也算作key值或value值的字符内容。
Collections工具类
Collections是操作List、Set、Map等集合的工具类。
常用方法:
排序操作
reverse(List):反转List 中元素的顺序。
shuffle(List):对 List 集合元素进行随机排序。
sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序。
sort(List,Comparator):根据指定的Comparator 产生的顺序对 List 集合元素进行排序。
swap(List,int,int):将指定 list集合中的i处元素和j处元素进行交换。
查找
object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素。
object max(Collection,Comparator):根据Comparator 指定的顺序,返回给定集合中的最大元素。
object min(Collection):根据元素的自然顺序,返回给定集合中的最小元素。
object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素。
int binarySearch(List list,T key)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。而且集合也事先必须是有序的,否则结果不确定。
int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。
int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。
复制、替换
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list, Object oldVal, Object newVal):使用新值替换 List 对象的所有旧值
提供了多个unmodifiableXxx( )方法,该方法返回指定Xxx的不可修改的视图。
添加
boolean addAll(Collection c,T..elements)将所有指定元素添加到指定collection中。
同步
Collections 类中提供了多个synchronizedxxx(方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。