黑马程序员-------Java集合

本文详细介绍了Java集合框架的构成及分类,包括List、Set、Map等接口的不同实现类及其特点。探讨了各种集合类的使用场景,并展示了如何利用工具类进行集合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------- java培训android培训、java博客、java学习型技术博客、期待与您交流! --------------

集合框架的构成及分类



Collection接口有两个子接口:

List(列表) ,Set(集)


  • List:可存放重复元素,元素存取是有序的。
  • Set:不可以存放重复元素,元素存取是无序的。


List接口中常用类

Vector:线程安全,但速度慢,已被 ArrayList替代。

ArrayList:线程不安全,查询速度快。

LinkedList:链表结构,增删速度快。

取出LIst集合中元素的方式:

get(int  index):通过脚标获取元素。

iterator():通过迭代方法获取迭代器对象

import java.util.*;
/*
去除ArrayList集合中的重复元素。
*/
class ArrayListTest 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		ArrayList al = new ArrayList();

		al.add("java01");
		al.add("java02");
		al.add("java01");
		al.add("java02");
		al.add("java01");
//		al.add("java03");
		/*
		在迭代时循环中next调用一次,就要hasNext判断一次。
		Iterator it = al.iterator();

		while(it.hasNext())
		{
			sop(it.next()+"...."+it.next());
		}
		*/

		/**/
		sop(al);
		al = singleElement(al);
		sop(al);
		
	}
	public static ArrayList singleElement(ArrayList al)
	{
		//定义一个临时容器。
		ArrayList newAl = new ArrayList();
		Iterator it = al.iterator();
		while(it.hasNext())
		{
			Object obj = it.next();
			if(!newAl.contains(obj))
				newAl.add(obj);
		}
		return newAl;
	}
}


迭代

迭代是取出集合中元素的一种方式。

因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

用法:

for(Iterator iter = iterator();iter.hasNext();  )
{
	System.out.println(iter.next());
}
Iterator iter = l.iterator();
while(iter.hasNext())
{
	System.out.println(iter.next());
}

Set接口中常用的类

  • HashSet:线程不安全,存取速度快。

 它是如何保证元素唯一性的呢?



  • TreeSet: 线程不安全,可以对Set集合中的  元素进行排序。

import java.util.*;
/*
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
	|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
			HashSet是如何保证元素唯一性的呢?
			是通过元素的两个方法,hashCode和equals来完成。
			如果元素的HashCode值相同,才会判断equals是否为true。
			如果元素的hashcode值不同,不会调用equals。
			注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
	|--TreeSet:
Set集合的功能和Collection是一致的。

*/
class HashSetDemo 
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		
		HashSet hs = new HashSet();

		sop(hs.add("java01"));
		sop(hs.add("java01"));
		hs.add("java02");
		hs.add("java03");
		hs.add("java03");
		hs.add("java04");

		Iterator it = hs.iterator();

		while(it.hasNext())
		{
			sop(it.next());
		}
	}
}


Map集合常用类

  • Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
  • HashMap:线程不安全,速度快,允许存放null键,null值。
  • TreeMap:对键进行排序,排序原理与TreeSet相同。

/*
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
	所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
		
	Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
				而这个关系的数据类型就是:Map.Entry

				Entry其实就是Map中的一个static内部接口。
				为什么要定义在内部呢?
				因为只有有了Map集合,有了键值对,才会有键值的映射关系。
				关系属于Map集合中的一个内部事物。
				而且该事物在直接访问Map集合中的元素。

*/
import java.util.*;
class MapDemo2 
{
	public static void main(String[] args) 
	{
		Map<String,String> map = new HashMap<String,String>();

		map.put("02","zhangsan2");
		map.put("03","zhangsan3");
		map.put("01","zhangsan1");
		map.put("04","zhangsan4");

		//将Map集合中的映射关系取出。存入到Set集合中。
		Set<Map.Entry<String,String>> entrySet = map.entrySet();

		Iterator<Map.Entry<String,String>> it = entrySet.iterator();

		while(it.hasNext())
		{
			Map.Entry<String,String> me = it.next();
			String key = me.getKey();
			String value = me.getValue();

			System.out.println(key+":"+value);

		}
		/*
		//先获取map集合的所有键的Set集合,keySet();
		Set<String> keySet = map.keySet();

		//有了Set集合。就可以获取其迭代器。
		Iterator<String> it = keySet.iterator();

		while(it.hasNext())
		{
			String key = it.next();
			//有了键可以通过map集合的get方法获取其对应的值。
			String value  = map.get(key);
			System.out.println("key:"+key+",value:"+value);
		}

		*/

	}
}


集合框架中的工具类

  • Collections

对集合进行查找

取出集合中的最大值,最小值

对List集合进行排序

……

  • Arrays

将数组转成List集合

对数组进行排序

对数组进行二分查找


  • 新增for语句

Collection在JDK1.5后出现的父接口Iterable就是提供了这个for语句。

格式:

for(数据类型 变量名 : 数组或Collection集合)

{

执行语句;

}

简化了对数组,集合的遍历。




------------- java培训android培训、java博客、java学习型技术博客、期待与您交流! --------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值