美文网首页我爱编程
java程序中一些应该注意的点

java程序中一些应该注意的点

作者: 关玮琳linSir | 来源:发表于2018-04-13 13:15 被阅读34次

    java程序中一些应该注意的点

    将数组转化为列表

    List<String> list = Arrays.asList(arr);//不推荐
    

    大家可能经常这样的操作,但是Arrays.asList()的返回值并不是java.util.ArrayList这个类的子类,而是java.util.Arrays.ArrayList这个类的子类,它是没有add这些方法的。

    ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));//推荐
    

    判断一个数组中是否包含一个值

    Set<String> set = new HashSet<String>(Arrays.asList(arr));
    return set.contains(targetValue);//不推荐
    

    以上的方法确实可以实现功能,但是它会浪费一些时间,因为转成Set是需要时间的。

    Arrays.asList(arr).contains(targetValue);//推荐
    

    在一个循环中删除列表中元素

    错误的四种的方法

    public static void remove1(List<String> list, String target){
            int size = list.size();
            for(int i = 0; i < size; i++){
                String item = list.get(i);
                if(target.equals(item)){
                    list.remove(item);
                }
            }
        }
        //删除之后list.size减小了,这样会越界
    
    public static void remove2(List<String> list, String target){
            for(int i = 0; i < list.size(); i++){
                String item = list.get(i);
                if(target.equals(item)){
                    list.remove(item);
                }
            }
        }
        //list大小一直在改变可能导致删除的不全,有剩余
    
    public static void remove4(List<String> list, String target){
            for(String item : list){
                if(target.equals(item)){
                    list.remove(item);
                }
            }
        }
        //系统会自动检查modCount != expectedModCount,不一致就会抛出异常
    
     public static void remove5(List<String> list, String target){
            Iterator<String> iter = list.iterator();
            while (iter.hasNext()) {
                String item = iter.next();
                if (item.equals(target)) {
                    list.remove(item);
                }
            }
        }
        //系统会自动检查modCount != expectedModCount,不一致就会抛出异常
    

    正确的三种方法

       public static void remove1(List<String> list, String target){
            for(int i = list.size() - 1; i >= 0; i--){
                String item = list.get(i);
                if(target.equals(item)){
                    list.remove(item);
                }
            }
        }
    
    public static void remove2(ArrayList<String> list, String target) {
            final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
            for (String item : cowList) {
                if (item.equals(target)) {
                    cowList.remove(item);
                }
            }
        }
    
    
    public static void remove3(List<String> list, String target){
            Iterator<String> iter = list.iterator();
            while (iter.hasNext()) {
                String item = iter.next();
                if (item.equals(target)) {
                    iter.remove();
                }
            }
       }
    

    相关文章

      网友评论

        本文标题:java程序中一些应该注意的点

        本文链接:https://www.haomeiwen.com/subject/syeckftx.html