java setlist_java之List,Set集合

1.List集合

①List集合的特点:

1,是有顺序,可重复的,因此可以根据索引查最值,和排序.,它的长度是可以改变的.它的元素可以是多种的.

2,它继承了Collection接口,所以也有了父类的功能.它特有的方法有:

1,add(int index,object obj);将一个元素添加到指定的索引前面.

2,get(int index);根据索引的位置取出该索引上的元素.

3,set(int index object obj);使用给定的集合的索引,然后去替换.自己所给定的元素.

*练习:

做一个List集合,集合中装入10个100以内不重复的数,

要求,对集合中的元素进行操作:

1.得到集合中元素的最大值,最小值。

2.对集合中的元素进行排序输出.

3.输出时,要求使用两种方式

5ca16d44c7897d3b812c1e50996d76d0.png

*关于List集合的遍历.

List是Collection的子接口,所以也可以用它的迭代器来获取元素.然而他有自己特有的迭代器,ListIterator();它获取的是ListIterator对象,它和Collection的迭代器的用法一样..

*ListIterator的特性:

传统的迭代器不能在遍历中经行添加元素和交换元素的动作,会发生交换异常,但是它可以,而且它还可以对元素经行双向遍历.注意在遍历的过程添加元素只能调用迭代器的方法,不能用集合的方法添加.

*List常用的方法:

Indexof(object  obj)返回该元素第一次在集合中出现的索引.

Remove( int  intdex); 根据索引删除该元素!返回被删除的元素

Remove(object  obj);根据给定的元素删除该元素第一次出现的位置.

*subList

public List subList(int fromIndex,int lastIndex);从指定的集合fromIndex开始,截取到lastIndex,包含开始不包含结束.返回的是一个List对象.

-------------------------------------------------------------------------------------------------------------

* List接口的具体实现类.

1.ArrayList(最重要)

1.它的底层实现是通过数组来实现的。

2.通过查看源代码,发现每一次执行add操作,它的底层数组会增长50%;

3.ArrayList集合它不是线程安全的。

2.LinkedList

3.Vector(了解)

Vector它底层也是使用数组实现的。

它每次增长100%

它是线程安全的。

了解

Enumeration---它功能相当于Iterator

Enum------它是java.util.Enum类

enum------它是一个关键字,用来声明枚举类型的。

*LinkedList

LinkedList它的底层实现是通过链表。

与ArrayList集合的区别:

1.ArrayList它的底层是使用数组实现

LinkedList底层是使用链表实现。

2.ArrayList在做遍历时效率高.

LinkedList在做删除或插入操作时效率高。

关于LinkedList它的特性方法。

它的实现是通过链表实现,所有它可以方便的对头尾元素操作。

* 开发中如何选用那个集合:

ArrayList:它是线程不安全。  如果对集合进行频繁的遍历与追加操作这时就使用ArrayList.

LinkedList 它是线程不安全。  如果对集合进行频繁的删除与插入操作,并且,常常要操作头尾元素这时使用它。

一般来说就选ArrayList就行

2,Set集合:

特点:无顺序不可重复.

研究Set集合,主要研究是它的具体实现类的特点。

1.HashSet

1.HashSet它的底层是使用hash表实现的。

2.HashSet中可以有null值。

3.HashSet是线程不安全的。

2.HashSet的使用

它所使用的方法都来自于Collection接口中的方法。

3.HashSet是怎样保证集合中的元素唯一的。(不重复)

HashSet集合它是通过equals来判断集合中的元素是否重复.(在重写equals时,要重写hashCode)

对于HashSet集合,它在装入元素时,首先会拿集合中所有元素的hashCode与要装入的新元素的hashCode对比。

如果不同,直接认为不重复,将新元素添加到集合中。

如果hashCode相同了,这时会拿新元素的equals方法与集合中的元素对比,如果equals也返回true,

这时才认为集合中的元素与新添加的元素重复。

简单说:HashSet它是通过集合中的元素的equals与hashCode方法来维护集合中元素的唯一性。

*总结:

1.List集合的常用方法。

1.add(int index,Object obj)//想具体的索引位置添加元素

2.get(int index);//获取指定索引的元素

3.int indexOf(Object obj)     lastIndexOf//获取该元素在集合中第一次出现的索引

4.set(int index,Object obj)//用给定的元素去和给定的索引上的元素替换.

5.Object remove(int index); //删除具体的索引上的元素.

6.List subList(int start,int end)//从某个索引到下个索引的元素.

7.ListIterator listIterator();//它特有迭代器

9c445c54451d6c04e884ec3c92bc6424.png

2.以于List集合的遍历。

传统的迭代器不能在遍历中经行添加元素和交换元素的动作,会发生交换异常,但是它可以,而且它还可以对元素经行双向遍历.注意在遍历的过程添加元素只能调用迭代器的方法,不能用集合的方法添加.,起它的方法和普通的迭代器的方法一样.

3.对于ArrayList,LinkedList,Vector的区别。

ArrayList:底层是通过数组实现的,该集合是有序的可重复的,线程是不安全的.可以适合的场合是排序,查最值,.遍历.效率高

LinkedList;底层是同过链结构实现的,该集合也是有序的可重复的,线程也是不安全的,使用的场合,删除,对首位元素的操作效率较高.效率高.

Vector:该集合线程是安全的效率不高.Vector它底层也是使用数组实现的。

它是线程安全的,它每次增长100%

4.HashSet集合是怎样保证元素的唯一性的。

简单的一句换就是,利用重写哈希值,和equls的方法,经行比较集合中的元素如果相同就不能添加,两者缺一不可! 重写了equls的方法,就比较的是属性了,不重写就相当==一样了,比较的是地址.

TreeSet

TreeSet也是Set接口的一个实现类.具有Set接口的特点元素不重复,,无顺序的.

但是它里面的集合可以自动排序.也叫自然排序..

什么叫元素的自然顺序?

实现了Comparable接口的类它的对象就具有了自然顺序.

使用TreeSet集合,装入自定义对象:操作步骤:

1.让自定义对象的类去实现Comparable接口。

2.重写compareTo方法。

注意:

如果要从小到大: this.属性-o.属性

如果是从大到小:o.属性-this.属性

如果属性是数值类型可以按上面的操作。

如果不是数值类型,可以直接调用属性的comparTo方法。

如果要从小到大: this.属性.comparTo(o.属性)

如果是从大到小:o.属性.compareTo(this.属性)

---------------------------------------------------------------------

TreeSet集合总结:

TreeSet它是一个Set,它的特点:无顺序不可重复。

TreeSet集合中的元素是可以排序的。

TreeSet集合是怎样对元素进行排序:

1.根据元素的自然顺序Comparable接口

2.通过指定的比较器Comparator接口.

TreeSet集合怎样保证集合元素的唯一性:

1.通过Comparable接口的方法comparTo的返回值为0来保证

2.通过Comparator接口的方法compar的返回值为0来保证.

TreeSet底层是使用二叉树来实现的。

TreeSet集合它的效率很低。

关于集合在开发中的应用:

1,如果只想要一个容器就用:AraayList.

2,如果想要一个可以保存不同类型的集合就用:HashSet

3,如果想要一个可以排序的集合就用:ArrayList.

4,如果对一个集合的首位元素操作过多就用LinkedList.

5,如果想要一个不重复的容器,并且存入元素与取出元素顺序一样就可以使用LinkedList..

jdk1.5特性------泛型

它是是什么?

答: 它是用来约束我们的类型.

它的特性:

提高了程序的安全性,把运行期的代码问题,转移到编译时期.省去了类型转换的麻烦.优化了程序的设计.

泛型可以在类上使用,也可以在接口中使用.

注意:

该方法不能在静态的类上修饰,因为静态的不需要创建对象,那么这时泛型就没有了意义!

泛型声明的位置:

一般声明在修饰符和返回值中间.方法上声明泛型有什么用?

1.当我们一个方法,它所在的类上已经有了泛型,但是,这个方法上不使用类上声明的泛型。

还想要在参数与返回值之间建立起关联。这时就可以在我们的方法上声明泛型。

2.static方法不能使用类上声明的泛型,但是方法上还想要使用泛型来限定,这时,只能在方法上定义泛型了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值