网站开发背景和目的,站长之家最新网站,南昌做微信网站,在哪里查关键词排名双列集合
单列集合的特点#xff1a;一次添加一个。
双列集合的特点#xff1a;一次添加一对/键值对/键值对对象/Entry。
左键#xff08;不可重复#xff09;右值#xff08;可重复#xff09;#xff0c;一一对应。
Map是双列集合的顶层接口#xff0c;他的功能是…双列集合
单列集合的特点一次添加一个。
双列集合的特点一次添加一对/键值对/键值对对象/Entry。
左键不可重复右值可重复一一对应。
Map是双列集合的顶层接口他的功能是全部双列集合都可以继承使用的。
//简单代码例子
import java.util.HashMap;
import java.util.Map;public class jaa {public static void main(String[] args) {//创建Map集合对象MapString,Stringmnew HashMap();//添加:put方法//键已经存在覆盖原有的m.put(lisa,女);m.put(bob,男);m.put(lisa,男);System.out.println(m);//删除m.remove(lisa);System.out.println(m);//清空m.clear();System.out.println(m);//是否包含boolean rm.containsKey(bob);boolean vm.containsValue(男);System.out.println(r);System.out.println(m);//是否空boolean ism.isEmpty();System.out.println(is);//长度int sizem.size();System.out.println(size);}
}
HashMap
特点是Map里面的一个类直接用map里的方法。无序不重复无索引。哈希表结构利用键计算哈希值依赖hashCode和equals方法保证键的唯一。
//例子
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;public class Main {public static void main(String[] args) {//存学生对象//名和岁数一样认为是一个学生HashMapstudent,Stringhmnew HashMap();student s1new student(zhangsan,23);student s2new student(lisi,24);student s3new student(wangwu,25);student s4new student(wangwu,25);hm.put(s1,江苏);hm.put(s2,浙江);hm.put(s3,福建);hm.put(s4,山东);Setstudent keyshm.keySet();for(student key:keys){String valuehm.get(key);System.out.println(keyvalue);}}
}
import java.util.Objects;class student {private String name;private int age;public student(String name, int age) {this.name name;this.age age;}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;student student (student) o;return age student.age Objects.equals(name, student.name);}Overridepublic int hashCode() {return Objects.hash(name, age);}Overridepublic String toString() {return student{ name name \ , age age };}
}
LinkedHashMap
有序存储和取出元素顺序一致不重复无索引。哈希表结构只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序。
import java.util.*;public class Main {public static void main(String[] args) {LinkedHashMapString,Integer lhmnew LinkedHashMap();lhm.put(a,1);lhm.put(a,1);lhm.put(b,2);lhm.put(c,3);System.out.println(lhm);}
}
TreeMap
底层和TreeSet一样都是红黑树结构。
由键决定不重复无索引可排序对键。
默认按照键的从小到大进行排序也可以自己规定键的排序规则。
实现Comparable接口指定比较规则。
创建集合时传递Comparator比较器对象指定比较规则。
//默认排序键的升序//Integer,Double默认升序
//String默认字母ASCII码升序
import java.util.*;public class Main {public static void main(String[] args) {TreeMapInteger,String tmnew TreeMap();tm.put(4,ke);tm.put(1,vn);tm.put(2,jsidj);tm.put(3,jd);System.out.println(tm);}
}
//降序
import java.util.*;public class Main {public static void main(String[] args) {TreeMapInteger,String tmnew TreeMap(new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});tm.put(4,ke);tm.put(1,vn);tm.put(2,jsidj);tm.put(3,jd);System.out.println(tm);}
}
可变参数
import java.util.*;public class Main {public static void main(String[] args) {//求和2个数加3个数加4个数加n个数加//可变参数//格式属性类型...名字//int...argsint sumgetSum(1,2,3,4,6,7,8);System.out.println(sum);}public static int getSum(int...args){int sum0;for(int i:args){sumsumi;}return sum;}
}
集合工具类Collections
1.批量添加方法
2.打乱方法
import java.util.*;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,ab,f,dvs,ds,dcs,dw);//批量添加System.out.println(list);//打印Collections.shuffle(list);//打乱System.out.println(list);}
}
创建不可变集合
不可变集合不可改一经创建长度不变内容不变。
更加安全。
of方法创建不可变集合
List直接用Set元素不能重复Map不能重复且键值对最多10个超过了ofEntries方法。
Stream流
一般结合lambda表达式简化操作。
得到流放数据中间方法和终结方法。
流流水线
流的获取如下代码
import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {//1.单列集合获取stream流ArrayListString listnew ArrayList();Collections.addAll(list,a,b,c,d);
// StreamString stream1list.stream();
// stream1.forEach(new ConsumerString() {
// Override
// public void accept(String s) {
// System.out.println(s);
// }
// });或者list.stream().forEach(s- System.out.println(s));//2.双列集合无法直接使用Stream//第一种方法HashMapString,Integer hmnew HashMap();hm.put(a,12);hm.put(b,124);hm.put(c,13);hm.keySet().stream().forEach(s- System.out.println(s));//第二种方法hm.entrySet().stream().forEach(s- System.out.println(s));//3.数组获取streamint arr[]{1,2,3,4,5,6,7};Arrays.stream(arr).forEach(s- System.out.println(s));String arr1[]{ds,d,w};Arrays.stream(arr1).forEach(s- System.out.println(s));//4.零散数据获取stream流同数据类型//可以传递数组但必须是引用数据类型Stream.of(1,2,3,4,5).forEach(s- System.out.println(s));Stream.of(a,d,s).forEach(s- System.out.println(s));}
} Stream流的中间方法如下
import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,张丽丽,李四,张浩,李四);//1.过滤
// list.stream().filter(new PredicateString() {
// Override
// public boolean test(String s) {
// return s.startsWith(张);
// }
// }).forEach(s- System.out.println(s));或者这么写list.stream().filter(s-s.startsWith(张)).forEach(s- System.out.println(s));//2.获取前几个元素list.stream().limit(2).forEach(s- System.out.println(s));//3.跳过前面几个元素list.stream().limit(2).skip(1).forEach(s- System.out.println(s));//4.去重list.stream().distinct().forEach(s- System.out.println(s));//5.合并a,b俩流ArrayListStringlist1new ArrayList();Collections.addAll(list1,张丽丽,李四,张浩,李四);ArrayListStringlist2new ArrayList();Collections.addAll(list2,张丽丽);Stream.concat(list1.stream(),list2.stream()).forEach(s- System.out.println(s));//6.转换流的数据类型ArrayListStringlist3new ArrayList();Collections.addAll(list3,张丽丽-11,李四-14,张浩-17,李四-14);
// list3.stream().map(new FunctionString, Integer() {
// public Integer apply(String s){
// String[]arrs.split(-);
// String ageStringarr[1];
// int ageInteger.parseInt(ageString);
// return age;
// }
// }).forEach(s- System.out.println(s));或者list3.stream().map(s-Integer.parseInt(s.split(-)[1])).forEach(s- System.out.println(s));}
}
流的终结方法如下
import javax.sql.rowset.serial.SerialStruct;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,a,d,f,s);//遍历list.stream().forEach(s- System.out.println(s));//统计long countlist.stream().count();System.out.println(count);//收集
// Object[]arrlist.stream().toArray();
// System.out.println(Arrays.toString(arr));或者// list.stream().toArray(new IntFunctionString[]() {
// Override
// public String[] apply(int value) {
// return new String[value];
// }
// });
// System.out.println(Arrays.toString(arr));再或者String[] arr2list.stream().toArray(value -new String[value]);System.out.println(Arrays.toString(arr2));}
}
收集方法collect
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListString listnew ArrayList();Collections.addAll(list,张无忌-男-15,周芷若-女-14,张强-男-20,赵敏-女-13);//1.收集到list//男ListStringnewlistlist.stream().filter(s-男.equals(s.split(-)[1])).collect(Collectors.toList());System.out.println(newlist);//2.收集到Set//男ArrayListString list33new ArrayList();Collections.addAll(list33,张无忌-男-15,周芷若-女-14,张强-男-20,赵敏-女-13,张强-男-20);SetStringnewlist2list33.stream().filter(s-男.equals(s.split(-)[1])).collect(Collectors.toSet());System.out.println(newlist2);//3.收集到Map//男//键值//键不可以重复
// MapString,Integermaplist.stream().filter(s-男.equals(s.split(-)[1])).collect(Collectors.toMap(new FunctionString, String() {
// Override
// public String apply(String s) {
// return s.split(-)[0];
// }
// },//前面是键后面是值。
// new FunctionString, Integer() {
// Override
// public Integer apply(String s) {
// return Integer.parseInt(s.split(-)[2]);
// }
// }));//或者这么写MapString,Integermaplist.stream().filter(s-男.equals(s.split(-)[1])).collect(Collectors.toMap(s-s.split(-)[0],s-Integer.parseInt(s.split(-)[2])));System.out.println(map);}
}
小结
1.Stream流的作用结合了Lambda表达式简化集合数组的操作。
2.Stream流的使用步骤获取stream流对象使用中间方法处理数据使用终结方法处理数据。
3.如何获取流单列集合默认双列不能直接获取数组Arrays零散数据of。
4.常见方法
中间filter,limit,skip,distinct,concat,map
终结forEach,count,collect
方法引用
把已经有的方法拿过来用当作函数式接口中抽象方法的方法体。
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {//数组倒序Integer[]arr{1,2,4,6,7};//1.匿名内部类Arrays.sort(arr, new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});System.out.println(Arrays.toString(arr));//2.lambbda表达式Arrays.sort(arr,(Integer o1, Integer o2)-{returno2-o1;});System.out.println(Arrays.toString(arr));//简化Arrays.sort(arr,(o1, o2)- o2-o1);System.out.println(Arrays.toString(arr));//3.方法引用//引用出必须是函数式接口//被引用的方法需要已经存在//被引用方法的形参和返回值需要跟抽象方法的形参和返回值一致//被引用方法的功能需要满足当前的要求Arrays.sort(arr,Main::subtraction);System.out.println(Arrays.toString(arr));}public static int subtraction(int num1,int num2){return num2-num1;}
}
方法引用符
方法引用分类
1.引用静态方法类名::静态方法
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,1,2,3);//转化成int//1.常规方式ArrayListIntegerlist2new ArrayList();for (String s : list) {int iInteger.parseInt(s);list2.add(i);}//2.list.stream().map(new FunctionString, Integer() {Overridepublic Integer apply(String s) {int i Integer.parseInt(s);return i;}}).forEach(s- System.out.println(s));//简化//1.方法已经存在//2.形参和返回值和抽象方法的形参返回值一致//3.方法的功能需要把形参的字符串转化成整数list.stream().map(Integer::parseInt).forEach(s- System.out.println(s));}
}
2.引用成员方法对象this,super,其他类::成员方法
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,张五级,里的,多多,的的);//张开头三个字list.stream().filter(s-s.startsWith(张)).filter(s-s.length()3).forEach(s- System.out.println(s));//匿名内部类list.stream().filter(new PredicateString() {Overridepublic boolean test(String s) {return s.startsWith(张)s.length()3;}}).forEach(s- System.out.println(s));//改成方法引用list.stream().filter(new Main()::stringjudge).forEach(s- System.out.println(s));}public boolean stringjudge(String s){return s.startsWith(张)s.length()3;}
}
3.引用构造方法类名::new
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,张无极,15,周芷若,14,张强,20);ListStudent newlist list.stream().map(new FunctionString, Student() {Overridepublic Student apply(String s) {String[] arr s.split(,);String name arr[0];int age Integer.parseInt(arr[1]);return new Student(name, age);}}).collect(Collectors.toList());System.out.println(newlist);//或者ListStudent newlist2 list.stream().map(Student::new).collect(Collectors.toList());System.out.println(newlist2);}
}
public class Student {private String name;private int age;public Student(){}public Student(String str){String[]arrstr.split(,);this.namearr[0];this.ageInteger.parseInt(arr[1]);}public Student(String name,int age){this.namename;this.ageage;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public String toString(){return Student{namename,ageage};}
}4.类名引用成员方法
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {
//变大写public static void main(String[] args) {ArrayListStringlistnew ArrayList();Collections.addAll(list,aaa,bbb,ccc);list.stream().map(String::toUpperCase).forEach(s- System.out.println(s));}
}
5.引用数组的构造方法
import javax.sql.rowset.serial.SerialStruct;
import java.lang.reflect.Array;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Main {public static void main(String[] args) {ArrayListIntegerlistnew ArrayList();Collections.addAll(list,1,2,3,4,5,6);
// Integer[] arr list.stream().toArray(new IntFunctionInteger[]() {
// Override
// public Integer[] apply(int value) {
// return new Integer[value];
// }
// });//改成方法引用Integer[] arr list.stream().toArray(Integer[]::new);System.out.println(Arrays.toString(arr));}
}
学不明白回头再写。