第6章:集合框架(下:容器类)
文章目录
1.Java容器框架
在面向对象的思想中,一种数据结构被认为是一个容器。数组是一种简单的数据结构,除了数组以外Java中还有其他数据结构,被称之为容器类或者集合类。
Java中有两个名称分别为Collection和Set的接口。通常我们称Collection为容器,称Set为集合。以下为集合框架的组成
1.1Collection接口
Collection是一个接口,所以不可以实例化,Collection接口提供了增加数据、删除数据、管理数据的方法。
方法 | 功能说明 |
---|---|
int size() | 返回容器中元素的个数 |
boolean isEmpty | 容器是否为空 |
boolean contains(object obj) | 判断容器是否包含元素obj |
**** | **** |
具体的可以查询Java 帮助手册
1.1.1列表接口 List
列表接口LIst是容器Collection 子接口,其中的元素必须按照顺序存放,且可以重复,也可以为空值
实现List类的接口的类主要有两个:1.链表类LikedList 2.数组列表类ArrayList
package chp12;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class TestList {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> ls = new ArrayList<String>();//创建ArrayList类对象
ls.add("aaa");//add方法
System.out.println(ls);
ls.add(0, "bbb");
ls.add("ccc");
ls.add("ddd");
System.out.println(ls);
System.out.println(ls.indexOf("ccc"));//indexof 方法
ls.remove(0);//remove方法
System.out.println(ls);
Iterator<String> i = ls.iterator();//使用迭代器
while(i.hasNext())
System.out.println(i.next());
}
}
1.1.1.1LinkedList 链表类
LinkedList 链表类采用链表结构保存对象,使用双链表实现List。这种结构向表中任意位置插入元素、删除元素时不需要移动其他数组,链表的大小是可以动态增大或者减小,不具备随机存储特性。
package chp12;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class TestList {
public static void main(String[] args) {
LinkedList<String> ls = new LinkedList<String>();
Collection<String> cs = new LinkedList<String>();
cs.add("222");
cs.add("333");
ls.add("111");
ls.addAll(cs);//addAll可以将Collection的子类作为参数增加到对象中
ls.addFirst("000");
String a = ls.getFirst();
System.out.println(ls+a);
}
}
1.1.1.2 ArrayList 数组列表类
ArrayList 数组列表类使用一维数组实现List,该类实现的是可变数组,允许所有元素,包括null。具有随机出去特性,插入,删除元素时需要移动其他元素,当元素很多,插入、删除操作的速度较慢。在向ArrayList中增加元素时,其容量会增大,但是可以使用trimToSize()方法讲数组的容量减小到数组列表的大小。
public static void main(String[] args) {
ArrayList<String> as = new ArrayList<String>();
as.add("111");
as.add("222");
as.add("333");
as.trimToSize();//大部分与List方法相同,多一个trimToSize,将数组大小调整为size大小
}
1.1.2 Set接口
Set是一个不含重复元素的接口,继承于Collection接口,它的方法大部分与Collection接口中继承而来的。
Set接口主要有两个特点:1.不含重复元素 2.Set集合中元素的顺序与元素加入的顺序不同。
Set接口的实现类主要有:1.哈希集合HashSet 2.树集合 TreeSet
1.1.2.1 HashSet类
package chp12;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class TestList {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
s.add("111");
s.add("aaa");
s.add("1321");
Iterator<String> i = s.iterator();
while(i.hasNext())//继承Collection 所以可以使用迭代器
System.out.print(i.next()+" ");
}
//输出顺序 aaa 111 1321
}
树集合 TreeSet
TreeSet类和HashSet类最大的区别就是,TreeSet类多一个特性:总是处于有序的状态
如果要创建TreeSet类,那么其中的泛型类T必须要继承Comparable接口(其中的compareTo方法是用来排序的)
package chp12;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person>{
int name;
public Person(int name) {
// TODO Auto-generated constructor stub
this.name = name;
}
public int getName() {
return name;
}
public void setName(int name) {
this.name = name;
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
int a =0;
if(this.getName()<o.getName()) a=1;
else a=-1;
return a;
}
}
public class TestList {
public static void main(String[] args) {
Set<Person> s = new TreeSet<Person>();
s.add(new Person(321));
s.add(new Person(123));
s.add(new Person(222));
Iterator<Person> i = s.iterator();
while(i.hasNext())
System.out.print(i.next().getName()+" ");
}
}
1.2 Map 映射接口
Map是属于另一种存储结构,Map 和Collection 最大的区别是,Map中的元素都是承兑出现的,它提供键与值的映射。
常用实现类有两个:1.HashMap类 2.TreeMap类
package chp12;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class TestList {
public static void main(String[] args) {
Map<String, String> hm =new HashMap<String, String>();
hm.put("苹果", "2.5元");//添加键值对
hm.put("李子", "3元");
hm.put("桃子", "4元");
hm.put("香蕉", "5元");
System.out.println(hm);//打印hm
hm.remove("李子");
System.out.println(hm);
Set<String> keys = hm.keySet();
Iterator it1 = keys.iterator();
Set<Entry<String, String>> ss = hm.entrySet();
Iterator it2 = ss.iterator();
while(it1.hasNext())
System.out.print(it1.next()+" ");
System.out.println();
while(it2.hasNext())
System.out.print(it2.next()+" ");
System.out.println();
Map<String, String> tm = new TreeMap<String, String>();
tm.putAll(hm);
System.out.println(tm);
}
}