java第十六天学习
1.哈希表案例解析:
2.LinkedHashSet是在HashSet基础上加了链表
数组+链表/红黑树+链表(多了一条链表,记录元素的顺序 包装元素有序)
3.可变参数
JDK 1.5之后 新特性
1.案例求和
1. 求三个数的和:
public static void main(int a,int b){
return a+b;
}
public static void main(int a,int b, int c){
return a+b;
}
2.求多个数的和:
案例:
public static void main(String[]args){
int []arr={1,2,3,4,5};
int sum=sum(arr);
System.out.println(sum);
}
public static int sum(int []arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
}
1.可变参数的案例 :
public static void main(String[]args){
int sum=sum(1,2,3,4,5,6);
System.out.println(sum);
}
public static int sum(int…arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
}
1.可变参数的语法:
方法名(数据类型。。。。变量名)
2.可变参数的原理:
可变参数底层就是一个数组 根据参数的个数不同 会创建不同长度的数组来存储这些参数 传递参数的时候可以是0个多少都可以
3.可变参数的注意事项:
-
一个方法的参数列表只能有一个可变参数
-
如果方法的参数有多个,那么可变参数必须在参数列表的末尾
案例:
public static void main(String[]args){
int sum=sum(1,2,3,4,5,6);
System.out.println(sum);
}
public static int sum(int a,int…arr){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
}
-
特殊写法Object…obj
案例:
public static void main(String[]args){
int sum=sum(1,2,3,4,5,6,new Student(12,"123“));
System.out.println(sum);
}
public static int sum(Object…obj){
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
}
注:object是万类之祖因此用Object做参数可以存储任意类型的数据(意义不大)
拓展:
4.Collections类
1.Collections是java.util包下的
2.Collections方法的测试
5.双列集合
map和collection
1.Map接口:
![]
2.map<k,v>是java.util包下的
3.Map集合的特点:
1.map集合是一个双列集合,一个元素包含两个值(Key,Value)
2.Map集合中的元素,key和value的数据类型可以相同也可以不同
3.Map集合中的元素,key是不允许重复的,value是可以重复的
4.map集合中的元素,key和value是一一对应的
4.HashMap
1.HashMap<K,V>是java.util包下的(java.util.HashMap<K,V>
2. HashMap的特点:
1.HshMap底层是一个哈希表 查询速度快
JDK1.8版本之前 数组+链表
JDK1.8版本以后 数组+链表/红黑树
2.HahMap是一个无序的元素集合 存储元素和取出元素可能不一致
3.HashMap中的方法:
1. public v put(K key,V value): 把指定的键与指定的值添加到Map集合中 。
2.public v remove(object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
3.public v get(object key):根据指定的键,在Map集合中获取对应的值。
4.boolean containsKey(object key):判断结合中是否包含指定的键。
5.pulic setkeySet():获取Map集合中所有的键,存储到Set集合中。
6.public set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值对对象的结合( Set集合)。
4.HashMap方法的实现:
1. public v put(K key,V value): 把指定的键与指定的值添加到Map集合中 。
案例:
2.public v remove(object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
案例1:
案例2:
案例3:
3.public v get(object key):根据指定的键,在Map集合中获取对应的值。
案例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqNRKiYu-1601276676570)(C:\Users\lenovo\Desktop\可变参数\get方法实现的案例.png)]
4.boolean containsKey(object key):判断结合中是否包含指定的键。
5.pulic setkeySet():获取Map集合中所有的键,存储到Set集合中。
案例:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zcMfAvFg-1601276676574)(C:\Users\lenovo\Desktop\可变参数\KeySet方法的实现.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rUyeEogg-1601276676578)(C:\Users\lenovo\Desktop\可变参数\KeySet方法实现的案例2.png)]
案例2.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOujnWjx-1601276676587)(C:\Users\lenovo\Desktop\可变参数\方案3.png)]
6.public set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值
案例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6CBvssF-1601276676591)(C:\Users\lenovo\Desktop\可变参数\error.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b1MRHrQk-1601276676596)(C:\Users\lenovo\Desktop\可变参数\entrySet方法的实现1.png)]
5. HashMap存储自定义类型Hero作为键 重写该类的HashCode和Equals
案例:
6.LinkedHashMap
1.LinkeHashMap是java.util包下的java.util.LinkedHashMap<K,V>
2.java.util.LinkedHashMap<K,V>extend HahMap<K,V>
3LinkedHahsMap底层:哈希表+链表 保证有序
案例:
7.HashTable
1.HashTable是java.util包下的 java.util.HashTable<K,V>
2.java.util.HashTable集合 implements Map 接口
3.HashTable和HashMap的区别
1.HashTable:底层是一个哈希表 是一个线程安全的集合,是单线程 速度慢
2.HahshMap:底层是一个哈希表 是一个线程安全的集合 是多线程 速度快
3.HashMap:可以存储null键 null值
4.HashTable:不能存储null值和NUll键
5.HashTable和Vector已被被替换了
案例:
public static void main(String[]args){
Hashtable<String,String> hashtable=new Hashtable<>();
hashtable.put(null,null);
//java.lang.NullPointerException
}
案例2:
public static void main(String[]args){
HashMap<String,String> Map=new HashMap<>();
Map.put(null,null);
}
-
properties
properties集合 是唯一一个和I/O流集合