今天学习的内容还是集合类相关的知识:
1.Map接口,存储的数据类型是键值对的形式的,并不是Collections的子接口,是一个顶层接口;
2.HashMap:
是Map的实现类,底层数据结构是哈希表,特性:无序性,key唯一性,value不唯一性。
如果添加了重复的key,则该key值的value会被后添加的value覆盖;
默认初始大小为16,负载因子大小为0.75;
常用方法:
put(e):添加元素;
get(key):获取key对应的value值;
containsKey/Value():返回boolean类型,判断是否存在指定Key/Value;
remove(key):按照Key值来移除元素;
remove(Key,Value):按照Key值和value值来移除元素;
size():返回有效元素个数;
isEmpty():判断集合是否为空;
putAll(Map):将指定Map中的所有元素都添加到当前集合中;
replace(Key,Value):将Key的Value值改为新的;
遍历循环方式:
(1)set <String> keys = map.keyset();
for(String key:keys){
System.out.println(key+Map.get(key));
}
(2)Set<Map.Entry<String,Integers>> entries = Map.entrySet();
for(Map.Entry<String,Integers> entry:entries){
System.out.println(entry.getKey()+entry.getValue);
}
推荐使用第二种遍历方式,第一种遍历方式是将所有的key存在一个集合中,每次需要访问时都还需要拿着key去Map里面找。而第二种方式则是直接把所有的key和value存在一个集合中,需要时直接访问集合就好了;
3.LinkedHushMap:继承与HushMap,和LinkedHushSet相似底层不止维护了一个哈希表(数组+链表)还维护了一个了链表来保证访问时的次序;
特性:有序性,Key唯一性,Value不唯一性;
4.TreeMap
底层是树结构,不管放入的顺序会按照key的值默认升序排列;
5.HushTable
和HashMap的区别:
(1)都是实现Map接口;
(2)HushTable是基于陈旧的Dictionary类的;
(3)HushTable是线程安全的,HushMap是非线程安全的,但是HushMap可以使用Collections的工具来实现线程安全;
(4)HushMap可以将null作为key或value,而HushTable不可以会报异常;
(5)HushMap的初始大小是16,HushTable初始大小是11,负载因子都是0.75;
(6)扩容时HushMap是每次*2,而HushTable是每次*2+1;
(7)HushMap的底层数据结构是:数组+链表+红黑树(在链表长度超过8时,将转换为红黑树的结构),而HushTable则是:数组+链表;
(8)计算Hush的方式不同:HushTable使用key的hushCode对数组长度取模得出hush值,而HushMap是使用key的HushCode的HushCode对数组长度取模得出的hush值;
6.Properties:继承与HushTable,主要用于处理属性文件
Properties properties = new Properties(); properties.load(ClassLoader.getSystemResourceAsStream("config.properties")); String username = properties.getProperty("username"); String password = properties.getProperty("password"); System.out.println("Username: " + username); System.out.println("Password: " + password);其他处理属性文件的方法:
ResourceBundle bundle = ResourceBundle.getBundle("config"); String username = bundle.getString("username"); System.out.println("username = " + username); String password = bundle.getString("password"); System.out.println("password = " + password);7.Stack类:
底层数据结构是堆栈(FILO),继承于Vector类。
常见方法:
push(e):压栈;
pop():弹栈;
peek():返回栈顶的元素;
search(Object):查找元素位置如果没找到返回-1;
isEmpty():判断栈是否为空;
8.队列Queue:底层数据结构是队列(FIFO),是一个接口,有两套实现基本操作的方法:
抛出异常的:
add(e);
remove();
element();
返回false或null的:
offer(e);
poll();
peek();
9.Dequeue:继承于Queue底层数据结构是双向队列,也是一个接口,可以先进先出也可以后进先出,支持所有元素在尾部或头部进行入队或出队;
同样Dequeue也有两套实现基本操作的方法:
抛出异常的:
addFirst(e);
removeFirst();
getFirst();
addLast(e);
removeLast();
getLast();
抛出false和null的:
offerFirst(e);
offerLast(e);
pollFirst();
pollLast();
peekFirst();
peekLast();
在使用栈结构时推荐使用的是Dequeue而不是stack,理由如下:
(1)面向接口编程可以隐藏实现细节;
(2)Stack继承于Vector线程安全;
学习内容如上,如有不对欢迎批评斧正。