Map(key-value键值对,夫妻对)。
HashMap
HashTable—>Properties
public static void main(String[] args){
Map<String,String> hashMap = new HashMap<>();
//存储键值对
hashMap.put("CN","中国");
hashMap.put("CN","中国");
hashMap.put("CN","中国");
hashMap.put("CN","中国");
//根据键获取值(键是唯一的)
String value = hashMap.get("CN");
System.out.println(value);
//获取集合中的键值对数量
int size = hashMap.size();
System.out.println(size);
//是否包含指定的键
boolean containsKey = hashMap.containsKey("CN");
System.out.println(containsKey);
//删除值
String removeValue = hashMap.remove("CN");
System.out.println(removeValue);
System.out.println(hashMap.containsKey("CN"));
//获取所有键的集合
set<String> keySet = hashMap.keySet();
System.out.println(keySet);
//获取所有值得集合
Collection<String> values = hashMap.values();
System.out.println(values);
//是否为空集合?
System.out.println(hashMap.isEmpty());
//清空集合内容
hashMap.clear();
//是否为空集合?
System.out.println(hashMap.isempty());
}
1.void put (Object key,Object value);存储键值对
2.Object get(Object key);根据键获取值(键是唯一的)
3.int size();获取集合中的键值对数量
4.boolean containsKey(Object key);是否包含指定的键
5.boolean containsValue(Objedt value);是否包含指定的值
6.Set keySet();获取所有键的集合
7.Collection vallues();获取所有值得集合
8.Object remove(Object key);根据键删除值,会返回被删除的值
9.boolean isEmpty();判断是否是空集合
10.void clear();清空集合内容
public static void main(String[] args){
Map<String,String> hashMap = new HashMap<>();
//存储键值对
hashMap.put("CN","中国");
hashMap.put("CN","中国");
hashMap.put("CN","中国");
hashMap.put("CN","中国");
Set<String> keySet = hashMap.keySet();
//遍历key键值,增强for
for(String key : keySet){
keySet.get(key);
String value = hashMap.get(key);
syso(key +" "+ value);
}
//迭代器遍历
Set<String> iterator = keySet.interator();
while(iterator.hasNext()){
String key = iterator.next();
String value = (String)hashMap.get(key);
System.out.println(key+" "+value)
}
Set< Entry<String, String> > entrySet = hashMap.entrySet();
//以条目形式行进遍历。
for(Entry<String, String> entry : entrySet){
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value)
}
}
线程安全问题。
多线程:重要,复杂,难度高
hashTable:
public static void main(String[] args){
//创建对象,线程安全 synchronized 同步锁
Map<String, String> map1 = new Hashtoble<>();
//hashMap不安全。
Map<String, String> map2 = new HashMap<>();
//map.put("CN","中国");
//map.put("CN","中国");
//HashTable 键和值都不允许为null
//HashMap 键和值都可以null 如果键为null则只能存一次
//map1.put (key,value);
}
相同点:(面试题)
1.HashMap和Hashtable都是map接口的实现,都可以实现键值对存储。
不同点:
1.HashMap键值存储都可以为空(null)如果键为null则只能存储一次。
Hashtable键值存储都不允许为空(null)。
2.HashMap是线程不安全的,效率高。
Hashtable是线程安全的,效率低。
在集合中用来约束/声明元素数据类型
泛型必须是引用数据类型(包装类型)
JDK1.5才出现的
包装类,注解,泛型…
1.在集合中用泛型声明元素数据类型
ArrayList<Object> array = new ArrayList<Object>();
//ArrayList
//ArrayList array = new ArrayList();
//ArrayList array = new ArrayList<>();(×)
1.没有泛型必须使用强转,强转有风险,必须用if判断行进强转
2.在集合中用来约束/声明元素数据类型,泛型必须是引用数据类型(包装类型)
3.利用泛型将程序变得跟家容易扩展(通过泛型占位符来进行扩展)
4.泛型中的数据类型是固定的,开始是什么,结果就是什么。
Arrys
Collections
List<Integer> list = Arrays.asList(9,3,12,14,7,2);
//排序,升序
Collections.Sort(list);
System.out.println(list);
//最大值,最小值
int max = Collections.max(list)
syso(list);
int min = Collections.min(list)
syso(list);
//二分查找
int binarySearch = Collections.binarySearch(list,2);
syso(binarySearch);
//打乱
int shuffle = Collections.shuffle(list);
syso(list)
1.void sort(集合);对集合进行升序排序
2.int max(集合);获取集合中的最大值
3.int min(集合);获取集合中的最小值
4.int binarySearch(集合,要查找的元素);查找指定的键
5.void shuffle(集合);打乱集合元素顺序