zoukankan      html  css  js  c++  java
  • java集合代码示例

    一、List

    ArrayList

    • 使用List时,最好初始化容量。
      ArrayList的默认容量为10,每次扩容增0.5倍,假如要放置100个元素,需要多次扩容。
       List<String> list=new ArrayList<>(100);
    
    • String数组转List,使用Arrays.asList。
      String[] stryArray=new String[]{"str1","str2","str3"};  
      List<String> list=Arrays.asList(strArray);
    
    • String(以逗号隔开)转List
    public static List<String> stringToList(String strs){
        if (strs==null) {
            return null;
        }
        String[] str = strs.split(",");
        return Arrays.asList(str);
    }
    

    注意,通过Arrays.asList转换的List,不可以使用add()方法。如果使用的话,会报错:java.lang.UnsupportedOperationException
    可以使用以下方式在新的List中添加数据:

        String[] stryArray=new String[]{"str1","str2","str3"};  
        List<String> list=Arrays.asList(strArray);
        
        List<String> strList=new ArrayList<>(list);
        strList.add("test");
    
    • List转成String数组,使用toArray()方法。
        List<String> list = new ArrayList<String>(2);
    	list.add("test1");
    	list.add("test2");
    	String[] array = new String[list.size()];
    	array = list.toArray(array);
    
    • List转String,用逗号隔开的,可以使用String.join(",",list)。也可以使用其他的分隔符。
      如下:
        List<String> list=new ArrayList<>();
        list.add("shen");
        list.add("zhen");
        list.add("shi");
        String words= String.join(",",list);
        System.out.println(words);
    
    • List转int[]数组,使用java8的stream()。
            int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();
    
    • int[]数组转List,如下:
    int[] arr = {4, 5, 3, 6, 2, 5, 1};
    List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
    
    • 判断集合个数是否为空。
        if (list!=null && list.size==0 ){
            //...
        }
    

    更推荐的做法是:
    使用apache的工具类CollectionUtils.isEmpty()。

        if (CollectionUtils.isNotEmpty(list)) {
    
        }
    
    • 删除list中的元素:
      想要遍历集合,删除元素,必须使用Iterator()。如果使用foreach(),可能会报错"ConcurrentModificationException"。
    public void removeElement() {
    	//如果采用Arrays.asList(),是不能对集合进行增删操作的。
    	List<String> list = new ArrayList<>();
    	list.add("1");
    	list.add("2");
    	Iterator<String> iterator = list.iterator();
    	while (iterator.hasNext()) {
    		String item = iterator.next();
    		if (item==null) {
    			iterator.remove();
    		}
    	}
    }
    

    更方便的写法,如下:

    public void removeElement() {
    	List<String> list = new ArrayList<>();
    	list.add("1");
    	list.add("2");
    	//removeIf(),内部使用的就是Iterator()。
    	list.removeIf(Objects::isNull);
    }
    

    LinkedList

    • 在增删比较多的场景下,使用LinkedList。

    返回空的List,不要返回null。

    返回null,容易导致空指针异常。
    可以使用Collections.emptyList(),表示的是空集合。
    示例如下:

    	public List<BillFiles> queryBillFiles(BillFiles billFiles) {
                    //以下是一个简单的数据库查询
    		List<BillFiles> billFilesList=billFilesMapper.queryBillFiles(billFiles);
    		if(billFilesList==null) {
    			billFilesList= Collections.emptyList();
    		}
    		return billFilesList;
    	}
    

    二、Set

    HashSet

    • 去重:可以使用Set不重复的特性进行去重。
      将集合作为HashSet()构造方法的参数。
    HashSet(Collection<? extends E> c)
    

    Set的size和原来集合的size相同,说明没有重复数据。也可以用contains()判断。
    示例如下:

            List<String> list=new ArrayList<>();
            list.add("123");
            list.add("456");
            Set<String> set = new HashSet<>(list);
            for (String s : set) {
                System.out.println(s);
            }
    

    也可以放入map的values集合:

    Map<Integer, Integer> map = new HashMap<>();
    Set<Integer> set = new HashSet<>(map.values());
    
    if( map.size() == set.size()){
    
    }
    //if(set.contains()){}
    

    三、Map

    HashMap

    • 遍历HashMap,代码如下:
            Map<Integer,String> map=new HashMap<Integer,String>();
            map.put(1,"banana");
            map.put(2,"apple");
            //遍历entrySet()返回的Set,其中每一个元素都是Map.Entry类型的,再通过getKey()、getValue()获取键值对
            //以下的Map为接口名,map为Map接口声明的变量。
            for (Map.Entry<Integer, String> entry : map.entrySet()) {
                System.out.println("键:"+entry.getKey() + ",值: " + entry.getValue());
            }
    
    
    • map.keySet():获取所有的key

    • map.values() :获取所有的value

    • 使用map.getOrDefault(Object key, V defaultValue)。如果key不存在,返回默认值。
      比如,用key存储字符串,用value统计次数。如下:

    Map<String, Integer> map = new HashMap<>();
    String word="s";
    int count=map.getOrDefault(word, 0);
    map.put(word,  count+ 1);
    
    • 使用compute(),对map中的k和v进行计算。
    compute(K key,
                BiFunction<? super K, ? super V, ? extends V> remappingFunction)
    

    第一个参数是key,第二个参数是匿名函数式,(k,v)-> 后面就是对key和value的具体处理逻辑。
    示例如下:

    Map<String, Integer> map = new HashMap<>();
    String word="s";
    Integer count=map.compute(word,(k,v)->{
    	if (v==null){
    		return 0;
    	}
    	return v+1;
    });
    
    

    待补充。

  • 相关阅读:
    C#编程总结 字符转码
    获取 苹果UDID 序列号
    SVN :This XML file does not appear to have any style information associated with it.
    oracle 实时查询最耗CPU资源的SQL语句
    Oracle 优化和性能调整
    weblogic管理脚本
    weblogic状态监控脚本
    oracle性能检测sql语句
    Oracle动态性能表-V$SESSION_WAIT,V$SESSION_EVENT
    linux HBA 卡驱动安装
  • 原文地址:https://www.cnblogs.com/expiator/p/11343447.html
Copyright © 2011-2022 走看看