您的位置:首页 > 编程语言 > Java开发

JAVA初级(十八)集合框架之List和Set的基本介绍和使用以及区别

2019-01-02 22:07 323 查看

本节介绍集合框架中的List和set


首先集合框架主要的作用是什么?
集合框架主要用来存储一组数据,就和数组一样.
集合框架主要分为两种Collection和Map,其中list和set属于Collection.
Collection表示存储一个数据的集合.只有一列的
Map存数键值对,这是有两列的

List和Set的基本使用,增删改查.

List和set的使用方法几乎一样.它们都是一个接口,因此要使用就要创建它们的实现类
由于它们是用来存数据用的,所以我们就需要知道如何来存储和取出,也就是如何来进行数据的增删改查

List是一个接口,常用的实现类有LinkedList和ArrayList

public static void main(String[] args) {
List arrayList = new ArrayList();//创建一个list的实现类ArrayList
List linkedList = new LinkedList();//创建一个list的实现类LinkedList
arrayList.add("a");//添加一个元素
arrayList.add("b");//添加一个元素
arrayList.add("c");//添加一个元素
String firstElement = (String)arrayList.get(0);//取出第一个元素-->也就是"a"元素
arrayList.set(0,"d");//修改第一个元素,把"a"修改成"d"
arrayList.remove(0);//删除第一个元素,这里就是把上面修改后的的第一个"d"删除
arrayList.remove("c");//删除"c"这个元素,把"c"删除
}

这样对一个List的基本操作就完成了.
增:add(int index)方法,添加一个元素
删:remove(int index或者Object o)方法,删除一个元素,删除指定索引或指定内容的元素
改:set(int index,Object o),修改指定索引的元素
查:get(int index)取出指定索引的元素
其中如果创建的实现类是LinkedList,那操作方法也是一样的,也是add,remove…

List将数据一 一的存储起来跟数组一样用下标来指定元素的位置.

set也是一个接口,常用的实现类是HashSet和TreeSet

Set hashSet = new HashSet();//创建一个hashSet的实现类
Set treeSet = new TreeSet();//创建一个treeSet的实现类
hashSet.add("a");// 添加一个元素
hashSet.add("b");// 添加一个元素
hashSet.remove("a");//删除"a"元素

这样对一个Set的基本操作就完成了
TreeSet的操作方法也是一样,
增和删的方法和List一样
但你发现Set没有get和set方法,也就是没有指定的查和改方法.并且remove方法没有指定索引的那个重载方法.这是一个主要区别.Set没有索引

List和Set的遍历

上面对List和Set进行了数据的存储,那么如果要一次性取出来要怎么做?
–>取集合的长度使用size()方法
1,for循环遍历

for (int i = 0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}

2,foreach遍历,也就是增强for循环

for (Object o:arrayList) {//右边写要遍历的集合,左边是元素的类型,中间是元素值.从第一个元素开始取
System.out.println(o);
}

3,Iterator迭代器遍历
用法步骤,
1,先用list的Iterator()方法创建这个list的Iterator
2,用while循环和Iterator的hasNext方法来判断是否还有元素
3,如果while判断为true,就用Iterator的next取出元素

Iterator iterator = arrayList.iterator();//创建这个list的Iterator
while (iterator.hasNext()){//判断下一个元素是否有值
Object next = iterator.next();//取出下一个元素的值
System.out.println(next);
}

这三种遍历有什么区别?什么时候用哪个?
首先如果只是输出结果,那么是没有区别的。但是如果要对集合增和删,那么它们就有区别.
看下面的代码
假如这个arrayList有三个元素{“a”,“b”,“c”}

for (int i = 0; i < arrayList.size(); i++) {
if (arrayList.get(i).equals("a")) {
arrayList.remove(i);//删除成功
}
}

for (Object o:arrayList) {
if(o.equals("a")) {
arrayList.remove(o);//报错
}
}

Iterator iterator = arrayList.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
if(next.equals("a")) {
iterator.remove();//删除成功
}
}

结论:
1,foreach中进行增和删.会报错,你把remove换成add也会报错,但普通的for和Iterator不会.
2,在这个例子中for和Iterator都成功的删掉了元素.但是在不确定元素的情况不推荐用for进行list的增删.这个例子中Iterator正确的对arrayList进行了三次遍历,但是for只有两次.因为在遍历第一次的时候把元素删了.size减少了1.因此就不能保证结果是对的.
–>所以如果要对list进行增和删的操作.用Iterator
其他两种看情况,foreach用的比较多.因为在实际开发中,list存的一般都是对象.foreach遍历对里面的对象进行逻辑操作比其他两种方便点.

List和Set的区别

上面已经说到了一个区别
1,list有索引,set无索引
其实就是说List是有序集合,Set是无序集合.因为List是有序的所以设计成了有索引.因为我们能准确的拿到指定位置的元素.Set是无序的所以设计成了没有索引.所以不能准确的拿到指定位置的元素,也就是没有get方法
至于为什么说有序和无序,这个要找能理解源码的人来说明的。我看了下源码,~并不能理解。
但我们使用set的原因主要是因为下面这个第二个区别
2.set不能存储重复元素,list可以

public static void main(String[] args) {
List arrayList = new LinkedList();
arrayList.add("a");//添加一个元素
arrayList.add("a");//添加一个元素
for (Object o:arrayList) {
System.out.print(o);
}
Set hashSet = new HashSet();//创建一个hashSet的实现类
hashSet.add("a");// 添加一个元素
hashSet.add("a");// 添加一个元素
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next());
}
}

执行以上代码,set只输出一个a
Set不能存储重复元素这个特性是开发中使用Set的最主要原因.

3,List查询快,插入慢,Set查询慢,插入快
这些就是list和set的主要区别

数组和集合的使用选择

选择使用数组还是集合得看具体的需求。要知道如何选择就得了解下它们的区别
1,数组的长度在定义时就固定了。而集合不是,集合会动态扩充长度。
所以在存储一组数据时,如果你能保证这组数据的长度固定不变时,使用数组.否则使用集合
2,要对一组数据进行增减操作时建议用集合.数组想要添加数组需要知道索引然后赋值,然后要删除则需要进行移位,即把后面的数据前移一个.操作繁琐容易出错.

不过使用数组最主要的原因就是能够长度不变.因为数组在查询,增删改上效率都是比集合高的。但是长度不能保证的话这个数组就可能直接没法用了,

总结:
1,List和Set是什么?
是集合框架的Collection的子接口.它们的实现类能够用来存储数据
2,List和Set怎么用?
创建它们的实现类,List主要有ArrayList和LinkedList,Set主要有HashSet和TreeSet。
List有add,get,remove和set方法来进行数据的增删改查.
Set有add和remove来进行数据的增删.
3,List和Set的遍历–>3中方法. 其中Set只有两种方法.foreach和Itreator
4.List和Set的3个主要区别.
(1)List有序,Set无序
(2)List能重复,Set不能重复
(3)List查询快,插入慢,Set查询慢,插入快
5,什么时候用什么集合好?
大多数情况的选择是可以重复的数据用List,不能重复的数据用Set.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐