Java SE
1.Set集合
Set用于存储不重复的对象集合,在Set集合中存储的对象中不存在两个对象equals比较为true。
HashSet和TreeSet是Set集合两个常用的实现类,分别用hash表和排序二叉树的方式实现Set集合。
Set<Integer> set = new HashSet<Integer>();
Random r = new Random();
int i = 0;
while (set.size() < 20) {
set.add(r.nextInt()100);
i++;
}
System.out.println("i ="+i);
System.out.println(set);
Set集合的遍历
Set集合不同于List集合,其中的元素不能喝书序的下标对应,无法从set集合中取出特定的元素;如果希望遍历Set集合中的元素只能调用其iterator方法,通过返回的Iterator对象来完成。
Set<String> strSet = new HashSet<String>();
strSet.add("One");strSet.add("Two");strSet.add("Three");
Iterator<String> it = strSet.iterator();
while (it.hasNext()){
String str = it.next();
System.out.println(str + "");
}
//Set集合的迭代输出顺序与其内部的存储结构有关于元素的添加顺序无关.
HashSet和hashCode方法的关系
HashSet是Set接口的实现类,通过Hash表的方式实现;
在将对象加入HashSet集合中时,需要获取对象的hashCode值通过Hsh算法索引到对象的存储空间。
hashCode方法
对于重写了equals方法的对象,一般要妥善的重写继承自Object类的hashCode方法。
2.Map集合
Map接口定义的集合又称为查找表,用于存储“Key-Value"映射对。
根据内部数据结构的不同,Map接口有多种实现类,其中常用的有内部hash表实现的HashMap和内部为排序二叉树实现的TreeMap。Map接口常用的方法为get和put。
String line = "169,589,798,723,589,169,169,723";
String[] arr = line.split(line);
Map<String,Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < arr.length; i++) {
if (map.containsKey(arr[i])){
map.put(arr[i],map.get(arr[i]+1));
}else {
map.put(arr[i],1);
}
}
System.out.println(map);//{723=2,798=1,169=3,589=2}
HashMap性能优化
Capacity:容量,Hash里面bucket的数量,也是三列数组大小。
Initial capacity:初始容量,默认构建容量16,也可以使用特定容量。
Size:大小,当前散列表中存储数据的数量。
Load factor:加载因子,默认为0.75,当前散列表增加数据如果size、capacity的值大于load factor则发生扩充并重新散列。
注:加载因子较小时候散列查找性能会提高,同时也浪费了散列桶空间容量。0.75是性能和控件相对平衡结合。
网友评论