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