Java的集合框架包括很多接口与相应的实现类,框架图如下:
Collection接口:是所有集合类的根接口,Collection<E>
子接口:
List:有序的集合,元素有序存入。
Set:无重复的集合。
Queue:是jdk1.5新加入的,表示队列。
常用方法:
add()
interator()
Map接口:顾名思义:映射关系,和Collection相比 Collection保存一个一个对象,而Map保存的是一对一对的对象(键值对)。
注意Key值不能重复,如果重复,则覆盖。
也是泛型接口 Interface Map<K,V>
方法:
Collection:
List:依然是子接口(有序的)
add(int index,E);
ArrayList LinkedList Vector这三个实现类
Set接口(不重复的)
HashSet TreeSet两个实现类
List:
ArrayList:数组列表,动态数组,连续内存存储
LinkedList 成为链表,可以进行频繁的插入
Vector:矢量集合,多线程同步
List list=new ArrayList();
这种使用方式不常用
常用的是:
List<User> list=new ArrayList<User>();
LinkedList:用起来和ArrayList一样
只是多了一些方法 addFirst(),addLast()等
for循环 和增强for循环以及迭代器;
ArrayList:
存值:add();
取值:get();
Iterator迭代器
Iterator<Book> iter=list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
一般用的最多的是增强for循环
Set:
HashSet 靠调用equals判断两个对象是否重复
TreeSet可以将集合排序
使用案例:
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample{
public static void main(String[] args){
User user1=new User("张华");
User user2=new User("张行");
Set userSet=new TreeSet();
useSet.add(user1);
userSet.add(user2);
Set userSet1=new HashSet();
useSet1.add(user1);
userSet1.add(user2);
注意:TreeSet里面的对象必须实现Comparable接口,不然会编译错误
}
}
List与Set测试类
package com.jun.collection;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class ListAndSetTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book book1=new Book();book1.setBookName("c++");book1.setBookPrice("$130");
Book book2=new Book();book2.setBookName("java");book2.setBookPrice("$100");
Book book3=new Book();book3.setBookName("c#");book3.setBookPrice("$150");
Book book4=book2;
Book book5=new Book();book5.setBookName("c#");book5.setBookPrice("$150");
//ArrayList
System.out.println("ArrayList案例");
ArrayList<Book> list=new ArrayList<Book>();
list.add(book1);
list.add(book2);
list.add(book3);
list.add(book4);
list.add(book5);
for(Book book:list){
System.out.println(book);
}
//HashSet
System.out.println("HashSet案例");
Set<Book> bookset=new HashSet<Book>();
bookset.add(book1);
bookset.add(book2);
bookset.add(book3);
bookset.add(book4);//这里book4于book2是一样的book2会被覆盖
bookset.add(book5);
/*
* 这里的book5内容和book3是一样的,但是是两个不同的对象,
* 要想内容一样的两个对象不重复的话可以重写equals方法;
*/
for(Book book:bookset){
System.out.println(book);
}
System.out.println("TreeSet案例");
//TreeSet(注意TreeSet使用是Book类必须实现Comparable接口)
Set<Book> booksett=new TreeSet<Book>();
booksett.add(book1);
booksett.add(book2);
booksett.add(book3);
booksett.add(book4);
booksett.add(book5);
for(Book book:booksett){
System.out.println(book);
}
}
}
Book.java
package com.jun.collection;
//此处必须实现该接口,不然编译不通过
public class Book implements Comparable<Book>{
@Override
public String toString() {
return "Book [bookName=" + bookName + ", bookPrice=" + bookPrice + "]";
}
private String bookName;
private String bookPrice;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookPrice() {
return bookPrice;
}
public void setBookPrice(String bookPrice) {
this.bookPrice = bookPrice;
}
/*
* 实现Comparable接口需要重写该方法根据什么进行排序
* 这是TreeSet与HashSet的不同之处
*/
public int compareTo(Book arg0) {
return 1;
//下面以数的价格进行排序
/*
* 由于为了方便我的bookPrice定义为了字符串没法比较,假设为int类型,代码如下:
if(bookName>arg0.bookPrice){return 1}
else if(bookPrice<arg0.bookPrice){return -1}
else {
return 0;
}
*/
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((bookName == null) ? 0 : bookName.hashCode());
result = prime * result
+ ((bookPrice == null) ? 0 : bookPrice.hashCode());
return result;
}
/*
* 一下是重写equals方法,此处用eclipse工具自动生成
* 自动生成方法:点击Source 选择 Generate Hash code() and equals()
*/
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Book other = (Book) obj;
if (bookName == null) {
if (other.bookName != null)
return false;
} else if (!bookName.equals(other.bookName))
return false;
if (bookPrice == null) {
if (other.bookPrice != null)
return false;
} else if (!bookPrice.equals(other.bookPrice))
return false;
return true;
}
}