1 集合概述
】 List(接口)和Set(接口)实现了Collection接口,ArrayList(底层为数组)、LinkedList(双向链表)继承了List;
】HashSet、TreeSet、LinkedHashSet实现了Set,
】List存放的数据是按照数据添加顺序进行存储的并且数据可以重复,Set数据不能重复;
】TreeSet对存储的数据时进行排序后存储的(利用二叉树 结构)
】Map是另一个接口,HashMap实现了Map.
】Collection与数组的区别
数组的容量 有限制,Collecion没有这种限制
Collection只能存放对象,数组没有限制。
2 List方法add()与addAll()的区别
List L1=new ArrayList();
L1.add("abd");
L1.add("df");
List L2=new ArrayList();
L2.add(L1);则L2.size()=1;
L2.addAll(L1);则L2.size()=2;
3 遍历集合
】所有实现了Collection接口的集合类都有一个iterator()方法用以返回一个实现了Iterator接口的对象。
Iterator it = coll.iterator();
】boolean hasNext(); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
while(it.hasNext(){
System.out.print(it.next());
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
LinkedHashSet
】输出结果与添加数据的顺序一致,内部使用链表来维护顺序。
1 Map的遍历
】通过keySet()方法获得一个set集合(存放的是Map中所有的键),通过遍历set获取值
】通过entrySet()方法得到一个包含 键-值对的集合Map.Entry<Object,Object>,通过Entry的getKey()getValue()方法获得值
( Map.Entry<> Entry是Map集合中的一个内部接口, 并且是静态的,所以能点出来)
】通过values()方法获得所有值得集合
2 HashMap
为了保证键不重复,需要再自定义的类中重写HashCode() equals()方法。键可以为空,线程不安全。
3 TreeMap
存储的键可排序,实现比较器
4 HashTable,
】存储键值对
】线程安全
】键不能为空
5 Collections工具类
sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。
】 TreeSet(排序好存储到集合中)
package com.kk;
public class Student implements Comparable<Student>{
private String name;
private int score;
public Student(String name, int score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", score=" + score + "]";
}
//先按分数从小到大排列,如果分数相同
//就按姓名字母自然排列(默认从小到大)
@Override
public int compareTo(Student o) {
if(this.score<o.score)
return -1;
else if(this.score>o.score)
return 1;
else{
return this.name.compareTo(o.name);
}
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Student s1=new Student("zhang san", 80);
Student s2=new Student("a san", 80);
Student s3=new Student("b san", 80);
Student s4=new Student("b san", 70);
Set<Student> s=new TreeSet<Student>();
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
Iterator<Student> it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
<span style="font-size:32px;"><strong>}
</strong></span>
】满足不同需求的比较器(TreeSet)
package com.kk;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
/**用java.util.Comparator比较器可以满足不同的需求
* @author Administrator
*
*/
public class Main {
public static void main(String[] args) {
Book b1=new Book("cc", 20);
Book b2=new Book("java", 20);
Book b3=new Book("c", 50);
Set<Book> s=new TreeSet<Book>(new myCom2());
// Set<Book> s=new TreeSet<Book>(new myCom1());
s.add(b1);
s.add(b2);
s.add(b3);
System.out.println(s);
}
}
/*图书:书名,价格
* 先按价格从小到大,再按书名从小到大
*
*/
class myCom1 implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
if (o1.getPrice()<o2.getPrice())
return -1;
else if(o1.getPrice()>o2.getPrice())
return 1;
else{
return o1.getName().compareTo(o2.getName());
}
}
}
/**先按价格从大到小,再按书名从大到小
* @author Administrator
*
*/
class myCom2 implements Comparator<Book>{
@Override
public int compare(Book o1, Book o2) {
if (o1.getPrice()<o2.getPrice())
return 1;
else if(o1.getPrice()>o2.getPrice())
return -1;
else{
return (o1.getName().compareTo(o2.getName()))*-1;
}
}
}
】HashSet(根据哈希算法保证数据的不重复性)
package com.kk;
/**自己定义的类要想保证在HashSet中元素不重复
* 需要重写HashCode()和equals()方法
*
* @author Administrator
*
*/
public class Student {
private String name;
private int score;
public Student(String name, int score) {
super();
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", score=" + score + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + score;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (score != other.score)
return false;
return true;
}
}
package com.kk;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
/**
* @author Administrator
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Student s1=new Student("zhang san", 80);
Student s2=new Student("a san", 80);
Student s3=new Student("a san", 80);
Set<Student> s=new HashSet<Student>();
s.add(s1);
s.add(s2);
s.add(s3);
Iterator<Student> it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}