第十二章总结

目录

集合论概述

Collection接口

List集合

list接口

list接口的实现类

Set集合

Map集合 

Map接口

Map接口的实现类


集合论概述

Java.util包中提供了集合类,这些集合类又被称为容器。集合类与数组的不同之处是:数组的长度是固定的,集合的长度是可变的;数组用来存放基本类型的数据,集合用来存放对方的引用。常用的集合有List集合、Set集合和Map集合,其中List集合与Set集合继承了Collection接口,各接口还提供了不同的实现类

Collection接口

collection接口时层次结构中的根接口,构成collection的单位称为元素。collecttion接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法

collection接口的常用方法
方法   功能描述
add(E e)将指定的对象添加到该集合中
remove(object o)将指定的对象从该集合中移除
isEmpty()返回Boolean值,用于判断当前集合是否为空
iterator()返回在此collection的元素上进行迭代的迭代器。用于遍历集合中的对象

size()

返回int型值,获取该集合中元素的个数

例题

import java.util.ArrayList;
import java.util.Collection;      //导入java.util包,其他实例都要添加该语句
import java.util.Iterator;

public class MUSTER {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
				Collection<String> list = new ArrayList<>(); // 实例化集合类对象
				list.add("《Java从入门到精通》"); // 向集合添加数据
				list.add("《零基础学Java》");
				list.add("《Java精彩编程200例》");
				Iterator<String> it = list.iterator(); // 创建迭代器,以此来遍历集合的对象
				while (it.hasNext()) { // 判断是否有下一个元素
					String str = (String) it.next(); // 获取集合中元素
					System.out.println(str);
	}
	}
}



List集合

list接口

List接口继承了collection接口,因此包含collection接口中的所有方法

get(int index):获得指定索引位置的元素

set(int index,Object obj):将集合中索引位置的对象修改为指定的对象

list接口的实现类

List接口的常用实现类有ArrayList类

ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问。缺点是向指定的索引位置插入对象或删除对象的速度较慢。

LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象。需要子济水向集合中插入、删除对象时,使用LinkedList 类实现的List 集合的效率较高:但对于随机访和删降用 List 集合时通常声明为List 类型,可通过不同的实现类来实例化集合。通过ArrayList类、LinkedList类分别实例化List集合的代码如下:

List<E> list = new ArrayList<>();

List<E> list2 = new LinkedList<>();

在上面的代码中,E可以是合法的 Java数据类型

例题

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Gather {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String>list=new ArrayList<>(); //创建集合对象
		list.add("a");                      //向集合添加元素
		list.add("b");
		list.add("c");
		int i=(int)(Math.random()*list.size());   //获得0-2的随机数
		System.out.println("随机获取集合中的元素:"+list.get(i));
		list.remove(2);                                         //将指定索引位置的元素从集合中移除
		System.out.println("将索引是’2‘的元素从集合移除后,集合中的元素是:");
		for(int j=0;j<list.size();j++) {          //循环遍历数组
			System.out.println(list.get(j));
		}
		System.out.println("foreach遍历数组");
		for(String temp:list) {
			System.out.println(temp);
		}
		System.out.println("Iterator迭代");
		Iterator it =list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
	

}

 

Set集合

Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包会复对象。Set 集合田Set接口和Set接口的实现类组成。Set 接口继承了Collection 接口,因此包含Collection接口的所有方法。

Set 接口常用的实现类有HashSet 类与TreeSet类,简述如下:

区HashSet 类实现 Set 接口,田哈希表(实际上是一个HashMap 实例)支持。它不保证Set集合

的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。

TreeSet 类不仅实现了Sct 接口,还实现了java.util.SortedSet 接口,因此TreeSet 类实现的Set

集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比

较器对用TreeSet类实现的Set 集合中的对象进行排序。

TreeSet类增加的方法
方法        功能描述
first()返回此Set集合返回当前第一个(最低)元素
last()返回此Set集合中当前最后一个(最高)元素
comparator()返回对此set集合中的元素进行排序的比较器,如果此set集合使用自然顺序,则返回null
headSet(E toElement)返回一个新的Set集合,新集合是toElement对象(不包含)之前的所有对象
 
subSet(E fromElement,E fromElement)

返回一个新的Set 集合,是fromElement 对象(包含)与 fromElement对象(不包含)之间

的所有对象

tailSet(E fromElement)

返回一个新的Set集合,新集合包含fromElement对象(包含)之后的所有对象

例题

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest {//创建TreeSetTest类

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Set<Integer> set = new TreeSet<>(); // 使用 TreeSet创建Set集合对象      或用HashSet来输出结果
		// 以下几行代码为向Set集合中添加元素
		set.add(-5);
		set.add(-7);
		set.add(10);
		set.add(6);
		set.add(3);
		Iterator<Integer> it = set.iterator();	// 创建Iterator迭代器对象
		System.out.print("Set集合中的元素:"); // 提示信息
		
		while (it.hasNext()) {// 遍历并输出Set集合中的元素
			System.out.print(it.next() + " ");
		}
	}

}//例题12.3

 

Map集合 

Map 集合没有继承Collection 接口,其提供的是key 到value 的映射。Map 集合中不能包含相同的key,每个key 只能映射一个value。key 还决定了存储对象在映射中的存储位置,但不是由 key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。

Map接口

Map 接口提供了将key 映射到值的对象。一个映射不能包含重复的key,每个key 最多只能映射到一个值。除集合的常用方法外,Map 接口还提供了如表12.3所示的特殊方法。

表12.3 Map 接口中除集合常用方法外的特殊方法
方法功能描述
put(K key,V value)向集合中添加指定的key 与value的映射关系
containsKey(Object  key)将键值数据传MaP中如果此映射包含指定key的映射关系,则返回true
containsValue(Object value)如果此映射将一个或多个key 映射到指定值,则返回true
get(Object key)如果存在指定的key 对象,则返回该对象对应的值,否则返回null
keySet()返回该集合中的所有key对象形成的Set集合
value()返回该集食中所有值对象形成的Collection集合

 

Map接口的实现类

Map 接口常用的实现类有HashMap 类和TreeMap类

1. HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用

null 值和 null键,但必须保证键的唯一性。HashMap 类通过哈希表对其内部的映射关系进行

快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

2. TreeMap 类不仅实现了Map接口,还实现了java.util.SortedMap 接口,因此集合中的映射关系

具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap类比 HashMap类性能稍差。由于 TreeMap 类实现的Map 集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。

建议使用HashMap 类实现Map 集合,因为由HashMap类实现的Map 集合添加和删除映射关系效率更高。可以通过HashMap 类创建Map 集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap 类实例

例题

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class HashMapTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String,String>map=new HashMap<>();
		map.put("ISBN-978654","Java从入门到精通");
		map.put("ISBN-978361","Android从入门到精通");
		map.put("ISBN-978893","21天学Android");
		map.put("ISBN-978756","21天学Java");
		Set<String> set = map.keySet(); 		// 构建Map集合中所有key的Set集合
		Iterator<String> it = set.iterator(); 	// 创建Iterator迭代器
		System.out.println("key值:");
		while (it.hasNext()) { 					// 遍历并输出Map集合中的key值
			System.out.print(it.next() + " ");
		}
		Collection<String> coll = map.values(); // 构建Map集合中所有value值的集合
		it = coll.iterator();
		System.out.println("\nvalue值:");
		while (it.hasNext()) {					 // 遍历并输出Map集合中的value值
			System.out.println(it.next() + " ");
	
	}

}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值