zoukankan      html  css  js  c++  java
  • Java学习:集合类

    集合

    我们之前学习过数组,我们编写的多数程序也都用到了数组,但有时我们发现有是数组并不能满足我们的所有需求,这是我们就要用到集合。

    集合与数组的区别:

    数组:
    1.长度固定
    2.可以存储基本类型,也可以存储引用类型
    3.存储元素类型一致
    集合:
    1.长度可变
    2.只可以存储引用类型
    3.可以存储多种类型

    集合类的体系结构图

     在这里我们目前主要学习Collection类、List类、ArraryList类、LinkedList类。

    Collection类

    成员方法:()
     A:添加功能
       boolean add(Object obj):往集合中添加一个元素
       boolean addAll(Collection c):往集合中添加多个元素
     B:删除功能
       void clear():清空所有元素
       boolean remove(Object o):从集合中删除一个元素
       boolean removeAll(Collection c):从集合中删除另一个集合的元素
     C:判断功能
       boolean contains(Object o):判断集合中是否包含指定的元素
       boolean containsAll(Collection c):判断集合中是否包含另一个集合的元素
       boolean isEmpty():判断集合是否为空。
    D:交集功能
        boolean retainAll(Collection c)
    E:迭代器(集合特有的遍历方式)
        Iterator iterator()
      重点:Iterator的使用
        1、使用步骤
        2、迭代器原理

        

      迭代器:
      Iterator iterator()
      Object next():返回迭代的下一个元素,并移动指向的位置
      boolean hasNext():判断是否有元素

      NoSuchElementException:没有这样的元素异常。
      原因是:你已经获取到元素的末尾了,你还要继续获取元素,已经没有了,所以就报错了。
      解决方案:应该在拿之前判断一下是否有元素。

      迭代器遍历集合:
      迭代器是依赖于集合而存在的。所以,要想得到迭代器对象,必须先有集合对象。
      
      迭代步骤:
      1):通过集合对象获取到迭代器对象
      2):通过迭代器对象的hasNext()方法判断是否有元素
      3):通过迭代器对象的next()方法获取元素


    F:长度功能
        int size():返回集合中元素的个数

    练习代码如下

     1 //1.创建dog对象
     2         Dog d1 = new Dog("小黑", 1, "藏獒");
     3         Dog d2 = new Dog("小黄", 1, "金毛");
     4         Dog d3 = new Dog("小白", 2, "萨摩耶");
     5         
     6         //2.创建集合
     7         Collection c = new ArrayList();
     8         
     9         //3.将dog对象添加到集合
    10         c.add(d1);
    11         c.add(d2);
    12         c.add(d3);
    13         
    14         //4.获取迭代器对象,该集合对应的迭代器对象
    15         Iterator it = c.iterator();
    16         
    17         // 5.调用方法进行遍历
    18         while (it.hasNext()) {
    19             Dog d = (Dog) it.next();
    20             System.out.println(d.getName()+"  "+d.getAge()+"  "+d.getType());
    21         }
    把Dog对象添加到集合并用迭代器遍历

    List类

    List集合的元素有序(储存和取出顺序一致),元素可重复。

    List的特有功能:
    A:添加功能
    void add(int index,Object obj):在指定的位置添加元素
    B:删除功能
    Object remove(int index):通过指定的索引删除元素,并把删除的元素返回
    C:获取功能
    get(int index) 返回列表中指定位置的元素。
    D:替换功能
    Object set(int index,Object obj)

    List的倒序与洗牌

    List中元素顺序可以被洗牌Collections.shuffle(list)
    List中元素顺序可以被倒序Collections.reverse(list)
    Collections.sort(list)对List元素排序(字母数字分别进行测试)

    List集合练习代码如下

     1 //创建学生对象
     2         Student s1 = new Student("大明", 20);
     3         Student s2 = new Student("二明", 18);
     4         Student s3 = new Student("三明", 16);
     5         Student s4 = new Student("小明", 15);
     6         
     7         //创建List集合
     8         List list = new ArrayList();
     9         
    10         //给集合中添加元素
    11         list.add(s1);
    12         list.add(s2);
    13         list.add(s3);
    14         list.add(s4);
    15         
    16         //普通for循环进行遍历
    17         for(int i=0;i<list.size();i++){
    18             Object object = list.get(i);
    19             Student s = (Student)object;
    20             System.out.println(s.getAge()+" "+s.getName());
    21         }
    22         
    23         System.out.println("-----------");
    24         //获取迭代器对象
    25         Iterator it = list.iterator();
    26         while (it.hasNext()) {
    27             Object obj = it.next();
    28             Student s = (Student)obj;
    29             System.out.println(s.getAge()+"  "+s.getName());
    30         }
    31         
    32         System.out.println("------------");
    33         //使用增强for循环遍历集合
    34         for(Object obj:list){
    35             Student s= (Student)obj;
    36             System.out.println(s.getAge()+"  "+s.getName());
    37         }
    迭代器、for循环和增强for循环

    ArrarList和LibkedList集合:为实现了List接口的集合类。

    相同点:有顺序的,元素可以重复
    (1)ArrayList特点:
    底层数据结构是数组,查询快,增删慢
    线程不安全,效率高
    (2)LinkedList特点:
    底层数据结构是链表,查询慢,增删快
    线程不安全,效率高

  • 相关阅读:
    android自定义控件onLayout方法
    android自定义控件onMeasure方法
    activity的四种启动模式详细分析
    android屏幕适配的全攻略2--支持手机各种屏幕密度dpi
    android屏幕适配的全攻略3-动态获取手机屏幕宽高及动态设置控件宽高
    DIV滚动条
    .NET面试题6
    .NET面试题5
    .NET面试题4
    .NET面试题2
  • 原文地址:https://www.cnblogs.com/shaofanglazi/p/6807697.html
Copyright © 2011-2022 走看看