黑马程序员---Java数据结构

本文详细介绍了Java中的集合框架,包括集合、列表、队列、映射表和集等数据结构。讲解了它们的特点、常用方法以及如何进行操作。特别提到了ArrayList和LinkedList的性能差异,以及HashMap、TreeMap和LinkedHashMap的选择建议。还讨论了Map接口的实现,如HashMap、TreeMap和ConcurrentHashMap,并强调了在多线程环境下的选择。最后总结了不同数据结构的适用场景。
摘要由CSDN通过智能技术生成

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
2015.10.8
2016.3.11

目录:

1.集合
2.列表
3.队列
4.映射表
5.集
6.遗留的集合实现
7.总结


1.集合

集合(Collection)是Java数据结构中的列表(List)、集(Set)、队列(Queue)等的超级接口。其中定义了公共的API。
除了特殊实现外,集合与数组的区别在于集合是无界的,可以保存任意多个元素。

(1)常见的方法:

  • 添加元素

    pubiic boolean add(E e)//添加单个元素
    public boolean addAll(Collection c)//添加整个Collection对象中的元素

    这两个方法的返回值表明当前调用者由于调用而发生更改,那么返回true。

    示例:

    // 新建一个Collection
    Collection c = new ArrayList();
    //添加单个元素
    boolean flag1 = c.add("Java");
    boolean flag2 = c.add("Android");
    
    //新建一个Collection
    Collection c2 = new ArrayList();
    //添加一整个Collecion对象的元素
    boolean flag3 = c2.addAll(c);
    
    //打印三次的添加结果
    System.out.println(flag1);//true
    System.out.println(flag2);//true
    System.out.println(flag3);//true    
    
  • 查询Collection

    public boolean contains(E e)//查询单个元素
    public boolean containsAll(Collection c)//查询整个Collecion
    public int size()//返回当前Collecion包含的元素

    示例:

    Collection c = new ArrayList();
    Collection c2 = new ArrayList();
    c.add("Java");
    c.add("Android");
    c2.addAll(c);
    
    // 使用contain方法查询元素是否存在
    boolean flag1 = c.contains("Java");
    // 使用containAll方法查询整个Collecion
    boolean flag2 = c2.containsAll(c);
    // 使用size方法查询集合的元素个数
    int size=c.size();
    
    // 打印结果
    System.out.println(flag1);// true
    System.out.println(flag2);// true
    System.out.println(size);// 3
    
  • 删除元素

    public void clear()//清除所有元素
    public boolean remove(Object obj)//从此collection中移除指定元素
    public boolean removeAll(Collection c)//移除整个c对象中包含的元素

    示例:

    Collection c1 = new ArrayList();
    Collection c2 = new ArrayList();
    c1.add("Java");
    c1.add("Android");
    c2.addAll(c1);
    
    // 清除c中的所有元素
    c1.clear();
    // 使用isEmpty方法判断c中是否为空
    boolean flag1 = c1.isEmpty();
    System.out.println(flag1);
    
    String target = "Java";
    // 清除c2中的"Java"元素
    c2.remove(target);
    // 使用contain方法查询元素是否被删除
    boolean flag2 = c2.contains(target);// true
    
    // 使用removeAll方法将清除c2与c1同时包含的元素
    c2.removeAll(c1);//由于c1为空,所以当前步骤将不删除任何元素
    
  • 遍历Collecion

    Collecion实现了Iterable接口,意味者它可以用迭代器迭代。迭代器是一种设计模式,Collecion中有数量巨大的实现类,每一个实现类的数据结构和实现细节都可能不同,但是迭代器没有依赖这些,这正是他的强大之处。

    下面的方法将返回当前Collecion的迭代器:
    public Iterator iterator()

    示例:

    Collection c = new ArrayList();
    c.add("Java");
    c.add("and");
    c.add("Android");
    
    // 获取c的迭代器
    Iterator iterator = c.iterator();
    
    while (iterator.hasNext()) {
        // 获取每一个元素
        String element = (String) iterator.next();
        // 下面的条件语句将删除"and"元素
        if (element.equals("and"))
            iterator.remove();
        // 打印元素到控制台
        System.out.println(element);
    }
    

    使用迭代器时要注意:

    • Java迭代器与位置紧密相连,只有调用了next方法才能查找某个元素。
    • 可以认为Java迭代器位于两个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素。
    • 同理,只有调用了next方法才能使用remove方法。
    • 迭代器进行迭代的时候,只能使用迭代器对Collecion进行修改,比如对Collecion元素的删除,如果迭代器发现它的集合被另一迭代器或者集合自身的方法修改了,就会抛出并发修改异常。例如下面的示例将是错误的:

      while (iterator.hasNext()) {
          // 获取每一个元素
          String element = (String) iterator.next();
          //此处使用c对象进行修改,将出现异常。迭代器依赖于集合存在,当集合元素被修改而迭代器不知道时将出现未知状况,所以迭代器检测到异常的修改后将抛出异常
          //c.remove("and");Error,ConcurrentModificationException
      }
      
  • 集合与数组的相互转换

    Collecion与数组的转换非常有用,可以把Collecion转化成一个数组,此时将大大增强数据的随机访问性能;同样使用数组初始化Collecion将可以使用很多集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值