private void initMap() {
//HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。
Map<String,Integer> map = new HashMap<>();
//key 弱引用,当不被引用是会被回收。
Map<String,Integer> weakmap = new WeakHashMap<>();
//能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,
// 当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Map<String,Integer> treeMap = new TreeMap<>();
//与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,
// 即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
Map<String,Integer> haMap = new Hashtable<>();
//保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,
// 先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
Map<String,Integer> linkMap = new LinkedHashMap<>();
for (int i = 0 ;i<15;i++){
map.put("key"+i,i*10);
weakmap.put("weakk"+i,i*100);
treeMap.put("tree-key"+i,i*1000);
haMap.put("haMap"+i,i);
linkMap.put("linkMap"+i,i*i);
UUID.randomUUID().toString();
}
Log.d(TAG, map.toString());
Log.d(TAG, weakmap.toString());
Log.d(TAG, treeMap.toString());
Log.d(TAG, haMap.toString());
Log.d(TAG, linkMap.toString());
/////////用keySet()遍历
for (String key : map.keySet()) {
System.out.println(key + " :" + map.get(key));
}
///用entrySet()遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " :" + entry.getValue());
}
//用keySet()遍历
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println(key + " :" + map.get(key));
}
//用entrySet()遍历
Iterator<Map.Entry<String, Integer>> iterator1 = map.entrySet().iterator();
while (iterator1.hasNext()) {
Map.Entry<String, Integer> entry = iterator1.next();
System.out.println(entry.getKey() + " :" + entry.getValue());
}
//增强for循环使用方便,但性能较差,不适合处理超大量级的数据。
//
//迭代器的遍历速度要比增强for循环快很多,是增强for循环的2倍左右。
//
//使用entrySet遍历的速度要比keySet快很多,是keySet的1.5倍左右。
//map 按照value 排序
// 通过ArrayList构造函数把map.entrySet()转换成list
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
// 通过比较器实现比较排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> mapping1, Map.Entry<String, Integer> mapping2) {
return mapping1.getValue().compareTo(mapping2.getValue());
}
});
for (String key : map.keySet()) {
System.out.println(key + " :" + map.get(key));
}
}
private void initVector(){
Vector<String> vector = new Vector<>();//重复值
Vector<String> stringVector = new Vector<>(15);
stringVector.add("ss");
stringVector.add("sss");
for (int i= 0;i<15;i++){
stringVector.add("stack item" + i);
}
stringVector.add("sss");
Log.d(TAG, stringVector.toString());
//这种方式最快
for (int i=0; i<stringVector.size(); i++) {
stringVector.get(i);
}
}
private void initStack() {
stringStack = new Stack<>();
for (int i= 0;i<15;i++){
stringStack.push("stack item" + i);
}
Log.d(TAG, stringStack.toString());
}
private void initSet(){//Set的实现类都是基于Map来实现的
Set<String> stringSet = new HashSet<>();//无序,不重复值
Set<Integer> integerSet = new LinkedHashSet<>();//wu序,不重复值
Set<String> stringSet1 = new TreeSet<>();
stringSet.add("sss");
integerSet.add(111);
for (int i= 0 ; i<15;i++){
stringSet.add("ssssss"+i);
integerSet.add(i);
stringSet1.add("jack"+i);
}
integerSet.add(111);
stringSet.add("sss");
stringSet.add("ssssss1");
stringSet1.add("ajack");
Log.d(TAG, stringSet.toString());
Log.d(TAG, integerSet.toString());
Log.d(TAG, stringSet1.toString());
Iterator<String> iterator = stringSet.iterator();
while (iterator.hasNext()){
Log.d(TAG, iterator.next());
}
}
java 数据结构
最新推荐文章于 2026-05-08 09:31:46 发布
本文深入探讨Java集合框架中各种Map和Set的实现类特性,包括HashMap、WeakHashMap、TreeMap、Hashtable、LinkedHashMap、HashSet、LinkedHashSet和TreeSet。解析它们的内部机制,如键值对的存储方式、排序原理及遍历方法。同时,对比不同集合类在性能和使用场景上的差异。
5150

被折叠的 条评论
为什么被折叠?



