---------------------- Set ---------------------
Set集合:不允许重复元素,娶出方法只有一个迭代器。
---------------------- HashSet
哈希表原理:根据自己的元素自已创造一种能够具有索引顺序的方法来定位
保证唯一性,元素必须覆盖hashCode()和equals
覆盖hashCode()是根据自己全部属性确定特点
覆盖equals是为解决hashcollision
比如先存ab,再存cd,再存de,
根据如图所示方法,ab的asic值195%10得到5,放到5角标
cd,de同理
所以查找ab,直接根据方法得到5值到5角标来查找,不需要挨个位置判断
元素唯一:不允许存储重复元素,因为会发生查找的不确定性
但假如放ba,会发生哈希望表冲突(哈希望算法算出元素索引位置一样),然后通过equals判断内容
不保证存入和取出顺序一致:比如de得到角标1,明显顺序不一致了
自定义存储对象
HashSet.java
package cn.itcast.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
* 往hashSet集合中存储Person对象。如果姓名和年龄相同,视为同一个人。视为相同元素。
*/
public class HashSetTest {
public static void main(String[] args) {
Set hs = new HashSet();
/*
* HashSet集合数据结构是哈希表,所以存储元素的时候,
* 使用的元素的hashCode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。
*
*/
hs.add(new Person("lisi4",24));
hs.add(new Person("lisi7",27));
hs.add(new Person("lisi1",21));
hs.add(new Person("lisi9",29));
hs.add(new Person("lisi7",23));
hs.add(new Person("lisi3",27));
Iterator it = hs.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p);
}
}
}
Person.java
package cn.itcast.Set;
public class Person {
private String name;
private int age;
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 Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public boolean equals(Object obj){
if(this==obj){
return true;
}
if(!(obj instanceof Person)){
throw new ClassCastException("ooo");
}
Person p =(Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
public int hashCode(){
final int NUMBER =37;
return this.name.hashCode()+this.age*NUMBER;
}
}
---------------------- TreeSet
dfsdfsfd
TreeSet:二叉树数据结构。可以对元素进行排序。不同步
保证元素唯一性:参考的就是比较方法的返回值是否是0,是0就是重复元素不存
排序方式:需要元素具备比较功能。所以元素需要实现Comparable接口,覆盖CompareTo方法
TreeSetDemo.java
package cn.itcast.Set;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo {
/*
* 多个字符串分为重复和不可重复,按照长度排序
*/
public static void main(String[] args) {
//sortString();
sortArray();
}
public static void sortString(){
Set set =new TreeSet(new ComparatorByLength());
set.add("haha");
set.add("abc");
set.add("zz");
set.add("nba");
for(Object obj:set){
System.out.println(obj);
}
}
public static void sortArray(){
String[] strs ={"haha","abdddfs","xixi","nba","cctv","nba","xixi"};
Comparator comp =new ComparatorByLength();
for(int x=0;x<strs.length-1;x++){
for(int y=x+1;y<strs.length;y++){
// if((strs[x].compareTo(strs[y]))>0){按照字典顺序。
//按照长度顺序
if(comp.compare(strs[x], strs[y])>0){
swap(strs,x,y);
}
}
}
for(String s:strs){
System.out.println(s);
}
}
public static void swap(String[] strs, int x, int y) {
// TODO Auto-generated method stub
String temp=strs[x];
strs[x]=strs[y];
strs[y]=temp;
}
}
ComparatorByLength.java
package cn.itcast.Set;
import java.util.Comparator;
public class ComparatorByLength implements Comparator {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String s1=(String)o1;
String s2=(String)o2;
int temp =s1.length()-s2.length();
return temp==0?s1.compareTo(s2):temp;
}
}
堆栈:后进先出
队列:先进先出
---------------------- 增强for ---------------------
package cn.itcast.collection;
import java.util.ArrayList;
import java.util.Collection;
public class ForDemo {
public static void main(String[] args) {
/*
* 增强 for循环:遍历Collection集合或者数组
* for(元素类型 变量:Collection容器或者数组){
* }
*/
Collection coll =new ArrayList();
coll.add("abc");
coll.add("ab");
coll.add("abe");
for(Object obj:coll){
System.out.println(obj);
}
}
}
<pre style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51); line-height: 26px; white-space: pre-wrap; word-wrap: break-word; font-size: 14px;"><span style="background-color: rgb(255, 204, 204);"><span style="font-size: 18px;">---------------------- Enumeration</span><span style="font-family: Arial, Helvetica, sans-serif;"> ---------------------</span></span>
package cn.itcast.collection;
import java.util.Enumeration;
import java.util.Vector;
public class Enume {
public static void main(String[] args) {
/*
* Enumeration枚举
* 只有Vector
*/
Vector v =new Vector();
v.add("abc1");
v.add("abc2");
v.add("abc3");
v.add("abc4");
Enumeration en =v.elements();
while(en.hasMoreElements()){
System.out.println("enu:"+en.nextElement());
}
}
}