zoukankan      html  css  js  c++  java
  • java基础List

    List基本属性和方法移步官方文档:

    List (Java Platform SE 8 )

    1.处理最简单的List<String>:

    (1)并集、交集、差集

    并集:

    如果只用List.addAll(Collection<? extends String> c)方法,获得的结果是两个List的元素值和,即会出现相同的元素,如以下代码:

     1     public void test(){
     2         List<String> list1 = new ArrayList<>();
     3         list1.add("北京");
     4         list1.add("上海");
     5         list1.add("广东");
     6         List<String> list2 = new ArrayList<>();
     7         list2.add("北京");
     8         list2.add("上海");
     9         list2.add("山东");
    10         list1.addAll(list2);
    11         System.out.println("list1.addAll(list2):"+list1);
    12     }
    13 
    14 获得的结果为:list1.addAll(list2):[北京, 上海, 广东, 北京, 上海, 山东]

    差集:

    如果想获得没有重复的集合,需要先了解一下List.removeAll(Collection<?> c),即求差集,如下代码:

     1     public void test(){
     2         List<String> list1 = new ArrayList<>();
     3         list1.add("北京");
     4         list1.add("上海");
     5         list1.add("广东");
     6         List<String> list2 = new ArrayList<>();
     7         list2.add("北京");
     8         list2.add("上海");
     9         list2.add("山东");
    10         list1.removeAll(list2);
    11         System.out.println("list1.removeAll(list2):"+list1);
    12     }
    13 
    14 获得的结果为:list1.removeAll(list2):[广东]

     无重复并集:

    此时若求无重复并集,可以先做差集,再进行并集,如下代码:

     1     public void test(){
     2         List<String> list1 = new ArrayList<>();
     3         list1.add("北京");
     4         list1.add("上海");
     5         list1.add("广东");
     6         List<String> list2 = new ArrayList<>();
     7         list2.add("北京");
     8         list2.add("上海");
     9         list2.add("山东");
    10         list1.removeAll(list2);
    11         list1.addAll(list2);
    12         System.out.println("list1.removeAll+addAll(list2):"+list1);
    13     }
    14 
    15 获得的结果为:list1.removeAll+addAll(list2):[广东, 北京, 上海, 山东]

     交集:

    交集使用retailAll()即可,如以下代码:

     1     public void test(){
     2         List<String> list1 = new ArrayList<>();
     3         list1.add("北京");
     4         list1.add("上海");
     5         list1.add("广东");
     6         List<String> list2 = new ArrayList<>();
     7         list2.add("北京");
     8         list2.add("上海");
     9         list2.add("山东");
    10         list1.retainAll(list2);
    11         System.out.println("list1.retainAll(list2):"+list1);
    12     }
    13 
    14 获得的结果为:list1.retainAll(list2):[北京, 上海]

    (3)有些时候,可能需要将某list查分成指定大小的list,所以简单的实现了一下:

     1     public static <T> List<List<T>> splitList(List<T> target, int size) {
     2         List<List<T>> listArr = new ArrayList<List<T>>();
     3         //获取被拆分的数组个数
     4         int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1;
     5         for (int i = 0; i < arrSize; i++) {
     6             List<T> sub = new ArrayList<T>();
     7             //把指定索引数据放入到list中
     8             for (int j = i * size; j <= size * (i + 1) - 1; j++) {
     9                 if (j <= target.size() - 1) {
    10                     sub.add(target.get(j));
    11                 }
    12             }
    13             listArr.add(sub);
    14         }
    15         return listArr;
    16     }
    17 
    18     @Test
    19     public void test(){
    20         List<String> list1 = new ArrayList<>();
    21         list1.add("北京1");
    22         list1.add("北京2");
    23         list1.add("北京3");
    24         list1.add("北京4");
    25         list1.add("北京5");
    26         list1.add("北京6");
    27         list1.add("北京7");
    28         list1.add("北京8");
    29         list1.add("北京9");
    30         list1.add("北京10");
    31         list1.add("北京11");
    32 
    33         System.out.println("list1:"+list1);
    34         System.out.println("result:"+splitList(list1,2));
    35     }
    36 
    37 结果:
    38 list1:[北京1, 北京2, 北京3, 北京4, 北京5, 北京6, 北京7, 北京8, 北京9, 北京10, 北京11]
    39 result:[[北京1, 北京2], [北京3, 北京4], [北京5, 北京6], [北京7, 北京8], [北京9, 北京10], [北京11]]

    (4)其他常用的简单方法:

     1        //List<Object>转List<String>
     2         List<Object> objectList = new ArrayList<Object>();
     3         List<String> stringList = (List<String>)(List)objectList;
     4         //将List<String>转成按某字符拼接成字符串
     5         String stringList2String = String.join(",", stringList);
     6         //将字符串按照某字符拆分成List<String>
     7         List<String> string2StringList = Arrays.asList(stringList2String.split(","));
     8 
     9         //String[]转List<String>
    10         List<String> stringList1 = Arrays.asList(new String[]{"str1","str2"});
    11         //此时,stringList1不能使用add方法,会报错Exception in thread "main" java.lang.UnsupportedOperationException,要进行以下处理
    12         List<String> stringList2 = new ArrayList<>(Arrays.asList(new String[]{"str1","str2"}));
    昔日我曾苍老,如今风华正茂(ง •̀_•́)ง
  • 相关阅读:
    洛谷P2770 航空路线问题 最小费用流
    洛谷P2766 最长不下降子序列问题 网络流_DP
    洛谷P2763 试题库问题 最大流
    洛谷P2756 飞行员配对方案问题 网络流_二分图
    洛谷P2045 方格取数加强版 最小费用流
    洛谷P1231 教辅的组成 网络流
    LA3231 Fair Share 二分_网络流
    [CTSC1999]家园 分层图网络流_并查集
    力扣题目汇总(丑数,重复N的元素,求众数)
    力扣题目汇总(最长连续递增序列,旋转图像(中等),宝石与石头)
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/14628561.html
Copyright © 2011-2022 走看看