第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);
		
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值