set 有2个常用子接口 特点:里面没有任何的重复元素 没有对Collection进行扩充
TreeSet: 有序存放
Hashset:散列存放
1————Hashset:散列存放
Hashset:子类中的内容是没有顺序的
package org.lxh.collectiondemo.setdemo;
import java.util.HashSet;
import java.util.Set;
public class HashSetAddDemo {
public static void main(String[] args) {
Set<String> allSet = new HashSet<String>();
allSet.add("A"); // 增加
allSet.add("B"); // 增加
allSet.add("C"); // 增加
allSet.add("C"); // 增加重复元素
allSet.add("C"); // 增加重复元素
allSet.add("D"); // 增加
allSet.add("E"); // 增加
System.out.println(allSet);
}
}
2————TreeSet: 有序存放
TreeSet:进行排序的操作接口
package org.lxh.collectiondemo.setdemo;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetAddDemo {
public static void main(String[] args) {
Set<String> allSet = new TreeSet<String>();
allSet.add("C"); // 增加重复元素
allSet.add("D"); // 增加
allSet.add("E"); // 增加
allSet.add("A"); // 增加
allSet.add("B"); // 增加
allSet.add("C"); // 增加
allSet.add("C"); // 增加重复元素
System.out.println(allSet);
}
}
3————关于排序的说明
package org.lxh.collectiondemo.setdemo;
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() { // 覆写toString()
return "姓名:" + this.name + ";年龄:" + this.age;
}
public boolean equals(Object obj) {//用于比较是否是同一个人 即是否出现重复项
if (this == obj) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
if (this.name.equals(p.name) && this.age == p.age) {
return true;
} else {
return false;
}
}
public int hashCode() { // 这个方法的返回值都是通过一个公式计算的(用于获得名字的hashCode码)
// 此时的公式:名字的hashCode * age
return this.name.hashCode() * this.age;
}
public int compareTo(Person o) {//比较大小先比年龄 后比名字
if (this.age > o.age) {
return 1;
} else if (this.age < o.age) {
return -1;
} else {
return this.name.compareTo(o.name); // 比较name
}
}
}
测试类:
package org.lxh.collectiondemo.setdemo;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetPersonAddDemo {
public static void main(String[] args) {
Set<Person> allSet = new TreeSet<Person>();
allSet.add(new Person("张三",30)); // 增加重复元素
allSet.add(new Person("李四",30)); // 增加重复元素
allSet.add(new Person("王五",31)); // 增加重复元素
allSet.add(new Person("赵六",32)); // 增加重复元素
allSet.add(new Person("孙七",32)); // 增加重复元素
allSet.add(new Person("孙七",32)); // 增加重复元素
System.out.println(allSet);
}
}
Iteartor(重点)
:迭代接口
方法:1---public boolean hasNext() //将指针向下移动,判断是否还有内容
2---public E next() //取出当前指针位置的内容
3---public void romove() //删除当前指针位置的内容
如果想要为Integer接口实例化,则必须使用Collection接口的如下方法:
public Integer<T> integer()
package org.lxh.iteartordemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo01 {
public static void main(String[] args) {
List<String> allList = new ArrayList<String>();
allList.add("A");
allList.add("B");
allList.add("C");
allList.add("D");
allList.add("E");
Iterator<String> iter = allList.iterator();
while (iter.hasNext()) {
System.out.print(iter.next() + "、");
}
}
}
删除
package org.lxh.iteartordemo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo02 {
public static void main(String[] args) {
List<String> allList = new ArrayList<String>();
allList.add("A");
allList.add("B");
allList.add("C");
allList.add("D");
allList.add("E");
Iterator<String> iter = allList.iterator();
while (iter.hasNext()) {
String str = iter.next(); // 取出内容
if ("C".equals(str)) {
iter.remove();// 删除元素
}
System.out.print(str + "、");
}
System.out.println("删除之后的集合:" + allList);
}
}
allList.remove(str);// 删除元素,使用的是List接口的删除
会出错 因为所有的Iteartor实际上,只是将一个集合的内容交给了Integer输出而已,而如果直接使用了集合的remove()方法,删除的话,则会破坏整个集合的内容,所以输出的时候会出现问题
foreach
在数组的输出上可以试用foreach完成,那么对于集合也同样适用
package org.lxh.foreachdemo;
import java.util.ArrayList;
import java.util.List;
public class ForeactDemo {
public static void main(String[] args) {
List<String> allList = new ArrayList<String>();
allList.add("A");
allList.add("B");
allList.add("C");
allList.add("D");
allList.add("E");
for (String str : allList) {
System.out.print(str + "、");
}
}
}