黑马程序员 学习日记(七)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

Java中的集合框架-续

上一篇重点介绍了常用的类、接口的概念,光说不练假把式,下面就拿代码真刀真枪的练一练!

1.ArrayList

ArrayList是有序数组结构,所以提供了很多关于序号的方法。
import java.util.*;
class CollectionDemo 
{
	public static void main(String[] args) 
	{
		ArrayList al = new ArrayList() ;
		al.add("java01") ;
		al.add("java02") ;
		al.add("java03") ;
		al.add(4) ;

		sop(al) ;

	}

	public static void sop(Object obj)
	{
		System.out.println(obj) ;
	}
}

输出结果:[java01, java02, java03, 4]
这个是最基本的向容器里添加对象的方式,不同于数组的地方是,集合类可以接收不同类型的数据。加了几个字符串后,还可以放入整数,只要你愿意就可以把任意类型对象放进去,而不必担心兼容问题。

除了这种毫无目的的添加方法外,Java还提供了选择位置插入的方法,把上面的代码稍微改改就有了:
import java.util.*;
class CollectionDemo 
{
	public static void main(String[] args) 
	{
		ArrayList al = new ArrayList() ;
		al.add("java01") ;
		al.add("java02") ;
		al.add("java03") ;
		al.add(4) ;

		al.add(3,"java05") ; //添加位置参数就可以指定插入位置
		sop(al) ;
	}

	public static void sop(Object obj)
	{
		System.out.println(obj) ;
	}
}
输出结果:[java01, java02, java03, java05, 4]
位置是从0开始计算,这里写了3就插入到了第四个位置。

大家都对插队者非常反感,在国外持枪国家,如果有人插队,排队的人会痛快的给那人一枪。
开个玩笑。。。。如果你不小心差错位置,就可以通过remove()方法删除。
再一次修改代码:
import java.util.*;
class CollectionDemo 
{
	public static void main(String[] args) 
	{
		ArrayList al = new ArrayList() ;

		al.add("java01") ;
		al.add("java02") ;
		al.add("java04") ;
		al.add("java02") ;

		al.remove("java02") ;  //删除第一个查找到的与参数相同的对象

		sop(al) ;
	}

	public static void sop(Object obj)
	{
		System.out.println(obj) ;
	}
}
输出结果:[java01, java04, java02]
ArrayList里可以放入相同的对象(放入的不是对象本体而是索引地址),因为是有序,并不会混乱。remove()方法在执行的时候不管你有几个,找到最前排的就删除,后面再有也不管了,只删一个。
<span style="font-size:14px;">al.set(2,"java09") ;</span>
set方法与remove类似,使用也是简单。这里就不多说明了。

2.Iterator

迭代器是非常有用且方便的东西,尤其是对于有序集合。当然,它只存在于有序集合里。
再实际当中,我们使用集合可不仅是为了对它增删改查,更多的是在那之后的获取。Iterator就是专门用于获取元素的类,或许你有想过用for循环去get。
import java.util.*;
class CollectionDemo 
{
	public static void main(String[] args) 
	{
		ArrayList al = new ArrayList() ;

		al.add("java01") ;
		al.add("java02") ;
		al.add("java04") ;

		Iterator itr = al.iterator() ;
		while (itr.hasNext())
		{
			System.out.println(itr.next()) ;
		}

		//sop(al) ;
	}
但我们为何不选择更加方便的类呢?list直接提供Iterator的实例,只需要去拿。
取到一个元素之后,不止能打印,Iterator还提供了remove()方法,没错,你在遍历元素的同时看到不顺眼的元素就可以删掉!
那我如何做增加、修改操作呢?
Iterator做不到的事情就交给它的子类去做。ListIterator具备所有你需要的功能!

3.Set集合

set集合与list集合形成两大派系。set元素是无序的(存入和取出的顺序不一定一致,有序绝对是队列的顺序先存先取),且元素不可重复!
set集合的功能与Collection是一致的,list不同的只是有了对序号的操作。。。。
set常见的子类,
HashSet, 底层结构是哈希表 
TreeSet

import java.util.*;
class CollectionDemo 
{
	public static void main(String[] args) 
	{
		HashSet hs = new HashSet() ;

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

		Iterator itr = hs.iterator() ;
		while (itr.hasNext())
		{
			sop(itr.next()) ;
		}
	}

	public static void sop(Object obj)
	{
		System.out.println(obj) ;
	}
}
输出结果:java04, java02, java03, java01
可以看出,学了ArrayList以后,其他的类用法都是一样的,很轻松就可以掌握,所以我就不再多说。
通过结果很明显看出set与list的不同点,无序和不重复!
什么样的情况会判定为重复呢?
HashSet会根据对象生成的哈希码去比较,如果两个对象的哈希码相同,且拥有的变量属性都相同就会判定为重复。

TreeSet是依靠TreeMap来实现的。TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象。

总结

这两天对于集合的学习收获颇多,由于内容过于庞大,日记也无法全部详尽记录,不过我相信通过这两篇的启发,以后学起来是可以事半功倍的!
还需要更多更多的努力。
大家互相学习互相进步!
---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值