文章目录
1 HashMap
HashMap通过键值对储存数据,键唯一不可重复,值可以重复。以相同的key 把不同的value插入到 Map中会导致旧元素被覆盖,只留下最后插入的元素。不过,同一个对象可以作为值插入到map中,只要对应的key不一样
package collection;
import java.util.HashMap;
public class HashMapTest {
public static void main(String[] args){
HashMap<String,String> dictionary = new HashMap<>();
dictionary.put("a","Tim");
dictionary.put("b","Jerry");
System.out.println(dictionary.get("b"));
}
}
利用HashMap查找某一特定对象
package collection;
import charactor.Hero;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class HashMapTest {
public static void main(String[] args){
List<Hero> hs = new ArrayList<>();
for (int i = 0; i <30 ; i++) {
Hero h = new Hero("number"+random());
hs.add(h);
}
System.out.println(reShape(hs));
System.out.println("利用HashMap输出某一元素的个数");
HashMap hs2 = reShape(hs);
ArrayList<Hero> result = (ArrayList<Hero>) hs2.get("number9");
System.out.println(result.size());
}
public static HashMap reShape(List<Hero> m){
HashMap<String,List<Hero>> heroMap =new HashMap();
for (Hero h : m) {
List<Hero> list= heroMap.get( h.name);
if(list==null){
list = new ArrayList<>();
heroMap.put(h.name, list);
}
list.add(h);
}
return heroMap;
}
public static int random(){
return ((int)(Math.random()*9)+1);
}
}
2 HashSet
HashSet 元素不能重复,没有顺序。用迭代器或增强型for循环获取其中的数据
package collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestCollection {
public static void main(String[] args){
HashSet<Integer> name = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
name.add(i);
}
//利用迭代器
for(Iterator<Integer> iterator = name.iterator();iterator.hasNext();){
Integer i = iterator.next();
System.out.println(i);
}
//增强型for循环
for(Integer i :name){
System.out.println(i);
}
}
}
3 Collections
Collections是一个类,容器的工具类,就如同Arrays是数组的工具类
reverse 反转
shuffle 混淆
sort 排序
swap 交换
rotate 滚动
synchronizedList 线程安全化
package collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestCollection {
public static void main(String[] args){
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
int t = (int)(Math.random()*10);
list.add(t);
}
System.out.println(list);
int count = 0;
for (int i = 0; i < 10000000; i++) {
Collections.shuffle(list);
if(list.get(0)==3&&list.get(1)==1&&list.get(2)==4){
count += 1;
}
}
System.out.println(count);
}
}
4 比较HashSet和ArrayList
ArrayList: 有顺序
HashSet: 无顺序
List中的数据可以重复
Set中的数据不能够重复
//利用Set中数据不能够重复的特点生成50个0-9999之间不重复的数据
package collection;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args){
HashSet<Integer> hs = new HashSet<>();
while (hs.size()<=50){
hs.add((int)(Math.random()*9999));
}
System.out.println(hs);
}
}
5 比较ArrayList和LinkedList
ArrayList 插入,删除数据慢
LinkedList, 插入,删除数据快
ArrayList是顺序结构,所以定位很快,指哪找哪。 就像电影院位置一样,有了电影票,一下就找到位置了。
LinkedList 是链表结构,就像手里的一串佛珠,要找出第99个佛珠,必须得一个一个的数过去,所以定位慢
6 比较HashMap和Hashtable
HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类
7 比较HashSet、LinkedHashSet和TreeSet
HashSet: 无序
LinkedHashSet: 按照插入顺序(既不重复,又有顺序)
TreeSet: 从小到大排序