Set集合

           Set集合存储的元素是无序的但是是唯一的,即不允许集合中重复元素的出现

 

package set.lww.com;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class SetDemo {
    /**
     * 集合框架set(hashset哈希表储存,重复元素储存底层探究)如下:
     * 不能存放重复元素(指的是  字符串  八大基本数据类型)
     * 
     * set集合中的元素是无序的
     * list.contains判重是因为底层调用了equals方法
     * set.add   底层调用了hashcode/equals方法
     * 
     * */
    public static void main(String[] args) {
        List  list=new ArrayList<>();
//        Set set=new HashSet<>();//set集合可以重复
        set.add("ww");
        set.add("mm");
        set.add("ll");
        set.add("hh");
        set.add("ww");
//        
//        set.add(new Person("ww", 17, 8500));
//        set.add(new Person("mm", 18, 7600));
//        set.add(new Person("ll", 19, 5500));
//        set.add(new Person("hh", 20, 4500));
//        set.add(new Person("ww", 17, 3500));
//        
//        System.out.println(set.size());
//        Iterator it=set.iterator();
//        while(it.hasNext()) {
//            System.out.println(it.next());
//        }
//        
//    }
//
//}
//class Person{
//    private String name;
//    private int age;
//    private int money;
//    public String getName() {
//        return name;
//    }
//    public void setName(String name) {
//        this.name = name;
//    }
//    public int getAge() {
//        return age;
//    }
//    public void setAge(int age) {
//        this.age = age;
//    }
//    public int getMoney() {
//        return money;
//    }
//    public void setMoney(int money) {
//        this.money = money;
//    }
//    @Override
//    public String toString() {
//        return "Person [name=" + name + ", age=" + age + ", money=" + money + "]";
//    }
//    public Person(String name, int age, int money) {
//        super();
//        this.name = name;
//        this.age = age;
//        this.money = money;
//    }
//    public Person() {
//        super();
//    }
    //set.add   底层调用了hashcode/equals方法
    
    //return 如果写死就会调用equals
    //在set里面判断是否是同一个元素并不由单个方法决定
        
        
//    @Override
//    public int hashCode() {
//        System.out.println("hashCode"+this.name);
//        int code=this.name.hashCode() + this.age;
//        System.out.println(code);
//        return code;
//    }
//    
//    @Override
//    public boolean equals(Object obj) {
//        Person p= (Person) obj;
//        return this.name.equals(p.name) && this.age == p.age;
//    }
//    
}
}

set中的元素是无序的,如图:

2、集合框架TreeSet(自然排序、数据结构二叉树、比较器排序)

package set.lww.com;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {
    /**
     *  2、集合框架TreeSet(自然排序、数据结构二叉树、比较器排序)
     *  
     *   treeset可自动排序
     * 重点:
     * 1.treeset容器是根据二叉树的排序规则对容器中元素进行排序   自然排序(元素自身比较性)
     * 
     *自然排序排序有什么用?
     *在做自然排序方法重写的时候,一定先判断主要条件,还要判断次要条件
     *比较器排序(应对代码频繁修改所带来的不便)不改代码也能进行排序
     *
     *
     *
     *
     * */
    public static void main(String[] args) {
//        TreeSet<Object> set = new TreeSet<>();
        TreeSet<Person> set = new TreeSet<>(new PresonMoneyAgeComp());
        set.add(new Person("ww", 17, 8500));
        set.add(new Person("mm", 188, 7600));
        set.add(new Person("ll", 19, 5500));
        set.add(new Person("hh", 27, 4500));
        set.add(new Person("wws", 17, 3500));
        Iterator it= set.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    

-----------treeset会自动排序


    }

}

//比较器排序(应对代码频繁修改所带来的不便)不改代码也能进行排序
//排序规则:有钱并年轻
class PresonMoneyAgeComp implements Comparator<Person>{

    @Override
    public int compare(Person o1, Person o2) {
        int num =o1.getMoney() - o2.getMoney();
        if(num == 0) {
            return o2.getAge() - o1.getAge();
        }
        return num;
    }
    
}

class Person implements Comparable<Person>{
    private String name;
    private int age;
    private int money;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", money=" + money + "]";
    }
    public Person(String name, int age, int money) {
        super();
        this.name = name;
        this.age = age;
        this.money = money;
    }
    public Person() {
        super();
    }
    public int hashCode() {
        System.out.println("hashCode"+this.name);
        int code=this.name.hashCode() + this.age;
        System.out.println(code);
        return code;
    }
    
    @Override
    public boolean equals(Object obj) {
        Person p= (Person) obj;
        return this.name.equals(p.name) && this.age == p.age;
    }
    
    /**
     * 让元素具有比较性
     * 
     * 
     * */
    
    //money进行排序
    @Override
    public int compareTo(Person o) {
    int num = o.money-this.money;
    if(num == 0) {
        return o.age - this.age;
    }
        return num;
    }

 

 

简介一下泛型

package set.lww.com;

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

public class FaXinDemo {
    /**
    *3、泛型(概述及使用、泛型类、泛型方法、静态方法泛型、泛型接口)
    *1、泛型方法在哪里使用?
    *2、为什么要使用泛型方法?
    *
    *
    *好处
    *1.将运行期的异常转换成编译期的错误,让程序员更早的发现,从而解决代码隐患
    *提高了代码的健壮性
    *
    *不使用泛型的情况下,会将为止的错误表现在运行时期
    *如果是用代码去处理了,这个可能发生的错误,那么运行时期的错误就不会暴露出来
    *泛型类
    *泛型接口
    *泛型方法
    *   对于编程而言有什么更深次的好处呢?
    *   
    */
    public static void main(String[] args) {
        List<Integer> c=new ArrayList();
        c.add(22);
        c.add(23);
        c.add(26);
        c.add(28);
        c.add(55);
//        c.add("s");
        Iterator it=c.iterator();
        while(it.hasNext()) {
            Object obj =it.next();
            if(obj instanceof Integer) {
                int num = (int) obj;
                if(num % 2 == 0) {
                    System.out.println(num);
                }
            }
            
            
            
        }
    }
    
    /*简单的例子
     * 
     * 购物车项目
     * 
     * class OrderDao{
     * public List<Order> list(Order order){
     * 
     * 
     * 
     * }
     * public int add(Order order){}
     * public int edit(Order order){}
     * public int del(Order order){}
     * }
     * 
     * 
     * class UserDao{
     * public List<User> list(User user){
     * 
     * 
     * 
     * }
     * public int add(User user){}
     * public int edit(User user){}
     * public int del(User user){}
     * }
     * 
     * class productDao{
     * 
     * 
     * }
     * 
     * ----不使用泛型的情况--------
     * ----使用泛型的情况--------
     * 
     * class BaseDao<T>{
     * public List<T> list (T t){}
     * public int add(T t){}
     * public int edit(T t){}
     * public int del(T t){}
     * 
     * 
     * }
     * 
     * Class OrderDao extends BaseDao<Order>{}
     * Class UserDao extends BaseDao<User>{}
     * Class ProductDao extends BaseDao<Product>{}
  
     * 
     * */

}
 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值