java算法题遇到的知识点(二)
1.Integer集合转换成int数组
操作方法是集合.stream().mapToInt(Integer::intValue).toArray()
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(3);
list.add(2);
for (Integer aa:list)
{
System.out.println(aa);
}
int[] ss=list.stream().mapToInt(Integer::intValue).toArray();
System.out.println("---------------------------------");
for (int aa:ss){
System.out.println(aa);
}
2.集合取交集
集合之间取交集,但是被交的B集合,如果A集合某个数比B集合的这个数少,还是会显示B集合的这个数
List<Integer> list1=new ArrayList<>();
List<Integer> list2=new ArrayList<>();
list1.add(1);
list1.add(3);
list1.add(2);
list2.add(2);
list2.add(2);
list2.add(3);
list2.retainAll(list1);
for (Integer aa:list2)
{
System.out.println(aa); //2,2,3
}
System.out.println("-------------");
list1.retainAll(list2);
for (Integer aa:list1)
{
System.out.println(aa); //3,2
}
3.两个集合取并集
removeAll方法加addAll方法完成了取并集的功能,removeAll和retainAll类似,都是对面如果有就删完
List<Integer> list1=new ArrayList<>();
List<Integer> list2=new ArrayList<>();
list1.add(1);
list1.add(3);
list1.add(2);
list2.add(2);
list2.add(2);
list2.add(3);
list2.add(4);
list2.removeAll(list1);
list2.addAll(list1);
for (Integer aa:list2)
{
System.out.println(aa); //4,1,3,2
}
4.给数组赋值
如果要给数组赋统一的值可以使用Arrays.fill 方法(a,form,to,var)
a–数组
form–替换开始位置(包括)
to–替换结束位置(不包括)
var–要替换的值
int[] b = new int[]{1,2,3,4,5,6};
Arrays.fill(b, 2, 4, 0);
for (int i=0;i<b.length;i++){
System.out.println(b[i]); //1,2,0,0,5,6
}
System.out.println("---------");
int[] c = new int[]{1,1,1,1,1,1};
Arrays.fill(c,2);
for (int i=0;i<c.length;i++){
System.out.println(c[i]); //2,2,2,2,2,2
}
5.指定位数复制数组
Arrays.copyOfRange方法(original,form,to)
第一个参数表示源数组
第二个参数表示开始位置(取得到)
第三个参数表示结束位置(取不到)
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
int[] b = Arrays.copyOfRange(a, 2, 6);
for (int aa :b) {
System.out.println(aa); //68,82,65,9
}
6.map的取值判断方法
判断Map集合中是否有这个key时,如果有就使用这个key值,如果没有就使用默认值defaultValue
map.getOrDefault(key,defaultValue)
Map<String, String> map = new HashMap<>();
map.put("name", "lxj");
String name1 = map.getOrDefault("name", "test");
System.out.println(name1); //lxj
String name2 = map.getOrDefault("name1", "test");
System.out.println(name2); //test
7.数组的扩展(1)
使用Arrays.copyOf能够重新设定数组的长度,第一个参数是原数组,第二个参数是新设置的长度。
tips:记得要给原数组
int[] aa={};
System.out.println(aa.length); //0
aa= Arrays.copyOf(aa,aa.length+1);
System.out.println(aa.length); //1
8.数组的扩展(2)
两个数组可以使用System.arraycopy方法来交换
第一个参数是被复制的数组
第二个参数是从被复制数组的第几位开始
第三个参数是复制进的数组
第四个参数是从复制进的数组的第几位开始
第五个参数是复制进去几位
int[] ary1=new int[]{11,12};
int[] ary2=new int[]{21,22};
int[] ary3=new int[ary1.length+ary2.length];
System.arraycopy(ary1,0,ary3,0,ary1.length);
System.arraycopy(ary2,0,ary3,ary1.length,1);
System.out.println(Arrays.toString(ary3)); //11,12,21,0
9.判断集合中是否存在某个数
集合中判断是否含有某个数使用contains()方法,类似于map集合中的containsKey()和containsValue()的用法,如果含有返回true,如果不含有返回false。
List list = new LinkedList();
list.add("A");
list.add("B");
list.add("C");
boolean flag = list.contains("f");
System.out.println(flag); //false
10.判断集合中某个值位于哪里
集合的indexOf()方法的实现机制是从序列(List)的第0个元素开始依次循环,并且调用每个元素的equals()方法和参数对象进行比较,如果某一个元素的equals()方法返回值为true,那么就把当前元素的索引位置作为结果返回。假如序列中有多个重复的元素,只返回这个重复的元素第一次出现时所在的索引位置的值。
这是从前往后的查找,从后往前的是lastIndexOf()方法
List list = new LinkedList();
list.add("A");
list.add("B");
list.add("C");
list.add("A");
int c=list.indexOf("A");
System.out.println(c); //0
11.判断String中某个字符位于哪里
也是和上面一样的使用indexOf()方法,后面的int代表从第几位开始,可以省略。
String cc="asdasad";
int a=cc.indexOf('s',2);
int b=cc.indexOf('s');
System.out.println(a); //4
System.out.println(b); //1
12.判断两个数组是否相等
可以使用Arrays.equals()方法
int[] a={4,5,6,7,7,8,9};
int[] b={4,5,6,7,7,8};
int[] c={4,5,6,7,7,8};
boolean cc=Arrays.equals(a,b);
boolean cd=Arrays.equals(b,c);
System.out.println(cc); //false
System.out.println(cd); //true