Java集合框架(二)

Collection接口是构造集合框架的基础,是单值数据操作的最大父接口,Collection接口包含了两个子接口List和Set,Collection接口定义的很多方法,List和Set接口都继承了下来。很少直接使用Collection接口,而是更多的去使用List和Set这两个子接口

  1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

  2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。

  3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>

List子类型:ArrayList(不安全高效,查询快,增删慢),LinkedList(增删快,查询慢),Vector(安全低效)

List接口的使用
代码演示:
package demo;
import java.util.ArrayList;
import java.util.List;

public class CollectionDemo {
public static void main(String[] args) {
//创建一个ArrayList对象
List list = new ArrayList();
list.add(“one”);
list.add(1);
//集合也重写了toString()方法,在输出时,会调用元素的toString()方法System.out.println(list);}}

代码结果:

[one, 1]
代码讲解:上述代码声明父类接口List,用子类型ArrayLsit去实例化,然后调用add()方法,向列表里面添加元素,因为集合也重写了toString()方法,所以直接输出对象即可。
演示一下泛型的使用:

代码演示:

package demo;

import java.util.ArrayList;
import java.util.List;

public class CollectionDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(2);
list.add(3);
list.add(new Integer(5));
/*
* list.add(“1”);会出现错误,因为泛型的限制,错误信息如下
* The method add(Integer) in the type List is not applicable for the arguments (String)
* list.add(“1”);
*/
System.out.println(list);

}

}
代码结果:

[2, 3, 5]
代码讲解:可以看到上述代码,泛型机制的引用也是十分简单的只需要List list = new ArrayList();即可

T可以换成其他类型,但不支持基本数据类型。

List可以实现动态数组,即大小不用一开始就确定好
代码演示:

import java.util.ArrayList;
import java.util.List;

public class CollectionDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(2);
list.add(5);
list.add(8);
list.add(9);
//调用size()方法,查看List集合的长度
System.out.println(list.size());
//接着添加数据,观察List集合的长度变化
list.add(3);
System.out.println(list.size());
}
}
代码结果:

4
5
代码讲解:通过上述例子,我们可以看到List集合不但可以通过泛型模拟数组,而且是动态增长的,即当需要添加一个元素,它会直接分配一个位置,并且存入元素的值。
ArrayList的其他方法

代码演示:

package demo;

import java.util.ArrayList;
import java.util.List;

public class CollectionDemo2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Integer(5));
list.add(new Integer(8));
list.add(new Integer(9));
list.add(new Integer(0));
list.add(new Integer(5));
list.add(new Integer(1));
list.add(new Integer(4));
//使用add(int index,Object obj)向指定位置插入元素,当前位置,和当前位置后元素响应后移一位,index从0开始
list.add(2, new Integer(6));
System.out.println(list); //[5, 8, 6, 9, 0, 5, 1, 4]
//使用remove(Object obj)移除一个元素
list.remove(new Integer(5));
System.out.println(list); //[8, 6, 9, 0, 5, 1, 4]
//使用remove(int index)移除指定位置的元素
list.remove(3);
System.out.println(list); //[8, 6, 9, 5, 1, 4]
/*
* 集合中也提供类似字符串的方法
* indexOf(Object obj):返回元素第一次出现的位置
* LastIndexOf(Object obj):返回元素最后一次出现的位置
*/
int index = list.indexOf(new Integer(6));
int lastindex = list.lastIndexOf(new Integer(6));
System.out.println(“6第一次的位置:”+index); //6第一次的位置:1
System.out.println(“6最后一次出现的位置:”+lastindex); //6最后一次出现的位置:1
/*
* toArray()将集合转换成的数组类型
*/
Object[] obj = list.toArray();
int sum = 0;
for (int i = 0; i < obj.length; i++) {
sum = sum + ((Integer)obj[i]).intValue();
}
System.out.println(“所有元素的和为”+sum); //所有元素的和为33

    //使用clear()方法清空List集合
    list.clear();
    System.out.println(list.size());        //0
}

}

LinkedList除了上述ArrayList使用的方法还有自己的方法

代码演示

package demo;

import java.util.LinkedList;

public class LinkedListDemo {
public static void main(String[] args) {
LinkedList l = new LinkedList();
l.add(“A”);
l.add(“B”);
l.add(“C”);
l.add(“D”);
l.add(“E”);
l.addFirst(“A0”);
l.addLast(“F”);
l.add(2, “A1”);
System.out.println(“链表里的内容是:”+l);
l.remove(l.size()-1); //等价于 l.removeLast();
System.out.println(“链表里的内容是:”+l);
l.remove(0); //等价于 l.removeFirst();
System.out.println(“链表里的内容是:”+l);
l.remove(1);
System.out.println(“链表里的内容是:”+l);
Object val = l.get(0);
l.set(0, (String)val+”Changed”);
System.out.println(“链表里的内容是:”+l);
}
}

迭代器Iterator
集合框架中还提供了Iterator接口,专门用于集合的迭代输出,所谓的迭代,可以理解为循环的意思

代码演示:

package demo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class CollectionDemo4 {
public static void main(String[] args) {
/*
* Iterator:迭代器,是一个接口
* List集合中提供了获取iterator的实现类的方法
* 用于迭代(遍历)元素
*/
List list = new ArrayList();
list.add(“a”);
list.add(“b”);
list.add(“c”);
list.add(“d”);

    //用多态的形式
    Iterator it = list.iterator();
    /*
     * 迭代器的特点:先问再取
     * it.hasNext():判断是否有下一个元素
     * it.next():取出元素
     */
    //while循环是专门为迭代器设计的
    //注意问一次取一次,避免出现异常
    while(it.hasNext()){
        Object obj = it.next();
        if(obj.equals("b")){
            it.remove();
        }       
    }
    System.out.println(list);   
}

}
代码讲解:上述代码演示了Iterator的使用,迭代器的使用可以使用集合对象.iterator()方法取得Iterator it对象

使用while循环遍历,需要先it.hasNext()判断迭代器是否有内容,如果有则使用it.next()移动遍历内容。

迭代器也可以加入泛型:
代码演示:

package demo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

class Point

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值