栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java(3) HashSet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java(3) HashSet

本篇总结下在短暂的学习过程中,关于HashSet的知识

先上代码

package com.NicMark.collection_.List_;

import java.util.ArrayList;
import java.util.List;

public class ListMethod_ {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("张三");
        list.add("黄");list.add("烂");list.add("张");
        //插入
        //void add(int index,Object element);
        list.add(1,"hzh");
        System.out.println(list);//讲元素插入到一个位置,该位置及靠后元素都往后移动一位
        List list2 = new ArrayList();
        //加入一个数组的内容
        list2.add("kac");
        list2.add("ggg");
        list.addAll(1,list2);
        //get(int index)
        //int indexOf(Object obj):返回obj在集合中首次出现的位置
        System.out.println(list.indexOf("Tom"));//不存在则返回负一
        //删除remove
        list.remove(0);
        //替换 将某个位置的元素替换成ele set(index x, Object ele)
        list.set(2,2);
        System.out.println(list);
        //返回从fromIndex到toIndex位置的子集合 List subList(int fromIndex, int toIndex)
        List returnList = list.subList(0,2);
        System.out.println(returnList);//取值范围[fromIndex,toIndex)
    }
}

八嘎,在这个之前,先整理下在数组中添加对象的一些实现方法。

package com.NicMark.collection_.List_;

import java.awt.print.Book;
import java.util.ArrayList;
import java.util.List;

public class ListExercise02 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Book_("啊啊啊","aaa",123));
        list.add(new Book_("表白吧","bbb",5423));
        list.add(new Book_("踩踩踩","ccc",133));
        list.add(new Book_("单独的","ddd",41));
        list.add(new Book_("呃呃呃","eee",53));
        //对集合排序
        sort(list);


        //遍历
        for(Object book:list){
            System.out.print(book);
        }

    }
    //静态方法
    public static void sort(List list){
        for(int i = 0;io2.getPrice()){
                    list.set(j,o2);
                    list.set(j+1,o1);
                }
            }
        }
    }
}

package com.NicMark.collection_.List_;

public class Book_ {
    private String name;
    private String author;
    private double price;

    public Book_(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return
                "n名称:'" + name +
                "tt价格" + price +
                "tt作者" + author;
    }
}

你看啊,那个sort,为什么要Book_ o1 = (Book_)list.get(j);呢?因为这是强制转换啊!为的是可以调用Book_中的方法,进行比较。
那么,我们都知道,在创建对象的过程中,由于对象的地址不相同,我们将会产生一个数组中有相同name或者其他信息的对象。
在这之前,还是讲下
HashSet会根据Hash算法,返回一个随机的地址,这个地址跟HashSet数组中的地址匹配,进而将数据放进去。
如果是普通的类似于String,int之类的,它就是它,在第二次或第n次插入它时,它将添加失败,add()将会返回false
但对象他不一样了啊!这个狗他叫mak,那个狗它也叫Mak,他们虽然一个名字,但他们是两只不同的狗啊!
所以就会发生不如上一样的情况,即出现两只不一样的同名狗。
那么我们默认规则当名字相同时,他就是一条狗!
所以我们要重写equals()与HashCode()函数,直接alt+insert


点一下,会呈现

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return age == employee.age && name.equals(employee.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

酱紫。
然后嘞,他们比较过后发现我超!名字相同,是同一条狗!
所以它的第二次添加就加不进去了!

[Employee{name='msmli', age=18}, Employee{name='milan', age=28}]

结果如上

结束!撒由那拉!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337695.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号