可变参数:
是1.5之后出现的新特性。
前提条件:
当方法的参数列表数据类型已经确定,但是参数个数不确定,就可以使用可变参数;
格式:
代码语言:javascript复制修饰符 返回值类型 方法名(数据类型...变量名){}
代码:
代码语言:javascript复制public static void sum(int...a){//可变参数}
注意:可变参数可传零-多个;
可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来储存这些参数;
注意事项:
1、一个方法的参数列表,只能有一个可变参数;
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾;
实例代码:
代码语言:javascript复制public static void sum(int b,int...a){
//可变参数必须放在参数列表的末尾,其他参数写在前面
}
Collections集合工具类
用来对集合进行操作的;
常用方法:
void shuffle(List<?> list):打乱集合顺序;
代码语言:javascript复制ArrayList<String> pai=new ArrayList<>();//创建集合
Collections.shuffle(pai);//打乱集合元素顺序
boolean addAll(Collection<? super T> c, T... elements):将所有指定元素添加到指定 collection 中;
代码语言:javascript复制ArrayList<String> pai=new ArrayList<>();//创建集合
Collections.addAll(pai,"a","b","cd");//将a,b,cd添加到集合pai中
void sort(List<T> list, Comparator<? super T> c):根据指定比较器产生的顺序对指定列表进行排序(默认是升序排序;
Person类:
代码语言:javascript复制public class Person implements Comparable<Person>{
private String name;
private int age;
/*
*此处隐藏构造方法以及get set等方法
*/
@Override
public int compareTo(Person o) {
return this.age-o.age;
//this-参数为升序
//参数-this为降序
}
}
Test类:
代码语言:javascript复制public class Test {
public static void main(String[] args) {
ArrayList<Person> arrayList=new ArrayList<>();
arrayList.add(new Person("张三",18));
arrayList.add(new Person("张四",21));
arrayList.add(new Person("张五",20));
System.out.println(arrayList);//未进行排序的
Collections.sort(arrayList);//进行排序
System.out.println(arrayList);//进行排序后
}
}
注意:
1、被排序的集合中存储的元素,必须实现Comparable接口,重写接口中的方法compareTo定义排序的规则;
2、 this-参数:升序
参数-this:降序
Map集合
Map集合特点:
- Map集合是一个双列集合,一个元素包含两个值(一个Key,一个Value);
- Map集合中的元素,Key和Value的数据类型可以相同,也可以不同;
- Map集合中的元素,key是不允许重复的,Value是可以重复的;
- Map集合中的元素。Key和Value是一一对应的;
Java.util.HashMap<K,V> Implements Map<K,V>接口
HashMap集合的特点:
1、HashMap集合的底层是哈希表,查询速度特别快;
JDK1.8之前:数组 单项链表;
JDK1.8之后:数组 单项链表/红黑树;
2、HashMap是一个无序集合,存储和取出的元素顺序有可能不一致;
Map接口中的方法:
①V put(K key, V value):将指定的值与此映射中的指定键关联(添加元素)
代码语言:javascript复制Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
注意:Key重复,会使用新的value替换map中重复的value,返回被替换的值;
②V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(删除对应的Key值元素)
代码语言:javascript复制Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.remove("小强");//删除Key值为"小强"的元素
③V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null(获取参数Key对应的Value值)
代码语言:javascript复制Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.get("小强");//获取到Value值 18
④boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true(查询对应key值)
代码语言:javascript复制Map<String,Integer> map=new HashMap<>();//创建集合
map.put("小强",18);//存放进集合
map.containsKey("小强");//查询Key值为小强的元素,返回true
HashMap集合的遍历:
第一种遍历:
Set<K> keySet():返回此映射中包含的键的 Set 视图
实现步骤:
- 使用Map集合中的方法KeySet(),把Map集合中所有的Key取出来,存储到一个Set集合中;
- 遍历Set集合,获取Map集合中的每一个Key;
- 通过Map集合中的get(Key)方法,用Key找到Value;
Map<String,Integer> map=new HashMap<>();
map.put("小东",180);
map.put("科比",190);
map.put("姚明",160);
//1、使用Map集合中的KeySet()方法,把Map集合中所有的Key取出来,存储到一个Set集合中
Set<String> strings = map.keySet();
//2、遍历Set集合,获取Map集合中的每一个Key
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
String next = iterator.next();//Key值
//3、通过Map集合中的get(Key)方法,用Key找到Value
Integer integer = map.get(next);//Value值
System.out.println(next "..." integer);
}
第二种遍历:
Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图
实现步骤:
- 使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中;
- 遍历Set集合,获取每一个Entry对象;
- 使用Entry对象中的方法getKey()和getValue获取键与值;
//第二种方式
//使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
Set<Map.Entry<String, Integer>> entries = map.entrySet();
//遍历Set集合,获取每一个Entry对象
Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
while (iterator.hasNext()){
//使用Entry对象中的方法getKey()和getValue获取键与值
Map.Entry<String, Integer> next = iterator.next();
String key = next.getKey();
Integer value = next.getValue();
System.out.println(key "..." value);
}
for (Map.Entry<String, Integer> x:entries){
//使用Entry对象中的方法getKey()和getValue获取键与值
System.out.println(x.getKey() "..." x.getValue());
}