ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-规约-集合

2020-10-20 08:31:53  阅读:229  来源: 互联网

标签:java String 规约 field1 list equals field2 集合 public


/**
 * 1
 * @hashCode&equals的处理:
 *  1-只要覆写了equals,必须复写hashCode.
 *  2-因为Set存储的是不重复的对象,依据hashCode和equals进行判断,所以Set存储的对象必须覆写这两个方法
 *  3-如果自定义对象作为Map的键,那么必须覆写hashCode和equals
 * @注意:String因为覆写了hashCode和equals方法,所以可以直接作为key使用
 */
public class day1019 {
    public static void main(String[] args) {
        Map<Item1,String> hashmap = new HashMap<Item1, String>();
        hashmap.put(new Item1("f1","f2"),"it1");
        hashmap.put(new Item1("f1","f2"),"it1");
        /**
         * hashMap使用put方法之前会调用hash方法取获取key的hashCode值,
         * 然后根据hash方法返回的boolean值来决定put操作
         */
        System.out.println(hashmap.size());//没有继承equals和hashcode的时候是2
        //继承之后是1
    }
}

class Item1{
    private String field1;
    private String field2;

    public Item1(String field1, String field2) {
        this.field1 = field1;
        this.field2 = field2;
    }

    public String getField1() {
        return field1;
    }

    public void setField1(String field1) {
        this.field1 = field1;
    }

    public String getField2() {
        return field2;
    }

    public void setField2(String field2) {
        this.field2 = field2;
    }

    /**
     * 按照默认的重载equals和hashcode
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Item1 item1 = (Item1) o;
        /**
         * 还比较了里面属性的值是否一致
         */
        if (field1 != null ? !field1.equals(item1.field1) : item1.field1 != null) return false;
        return field2 != null ? field2.equals(item1.field2) : item1.field2 == null;
    }

    @Override
    public int hashCode() {
        int result = field1 != null ? field1.hashCode() : 0;
        result = 31 * result + (field2 != null ? field2.hashCode() : 0);
        return result;
    }
}

 

/**5
 * ArrayList的subList结果不可强转为ArrayList,否则抛异常ClassCastException;
 * @注意:sublist()返回的是ArrayList内部类Sublist,并不是ArrayList本身,而是一个视图
 */
public class day10191 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("1");
        arrayList.add("2");
        arrayList.add("3");
        arrayList.add("4");
        System.out.println(arrayList);
        try{
           ArrayList<String> a = (ArrayList<String>) arrayList.subList(0,2);
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        List<String> list = arrayList.subList(0,2);
        System.out.println(arrayList);
        System.out.println(list);
    }
    /**
     * re:
     * [1, 2, 3, 4]
     * java.util.ArrayList$SubList cannot be cast to java.util.ArrayList
     * [1, 2, 3, 4]
     * [1, 2]
     */
}

 

 

/**
 *14
 * 不要再foreach循环进行元素的remove和add操作,
 * @remove元素使用Iterator方式
 * 如果并发操作,需要对Iterator对象加锁
 */
public class day10193 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("x");
        list.add("x");
        list.add("y");
        list.add("y");
        list.add("z");
        list.add("z");
//        for (int i = 0; i < list.size(); i++) {
//            String s = list.get(i);
//            if (s.equals("z")){
//                list.remove(s);//执行这个的时候,其实list的长度会变化,元素会前移
//            }
//        }
        System.out.println(list);//[x, x, y, y, z]
    // 正确的方法:
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if (next.equals("z")){
                iterator.remove();
            }
        }
        System.out.println(list);

    }
}

 

标签:java,String,规约,field1,list,equals,field2,集合,public
来源: https://www.cnblogs.com/java-quan/p/13844080.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有