----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------
输出结果:[java01, java02, java03, 4]
ArrayList里可以放入相同的对象(放入的不是对象本体而是索引地址),因为是有序,并不会混乱。remove()方法在执行的时候不管你有几个,找到最前排的就删除,后面再有也不管了,只删一个。
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培训、期待与您交流! ----------------------