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>{}
*
* */
}