Java学习笔记11之Java集合(1)

1.集合与数组

1.1集合与数组存储数据概述

  • 集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
  • 说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(如:".txt",".jpg",".avi",数据库等。)

1.2数组存储的特点

  • 一旦初始化以后,其长度就确定了。
  • 数组一旦定义好,其元素的类型也就确定了。我们也就智能操作指定类型的数据了。
  • 比如:
String[] arr; //arr只能存储String类型的数据
int[] arr1;//arr1只能存储int类型的数据
Object arr2;//arr2只能存储Object类型的数据

1.3数组存储的弊端

  • 一旦初始化以后,其长度就不可修改。
  • 数组中提供的方法非常少,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
  • 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用。
  • 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。

1.4集合存储的优点:

解决数组存储数据方面的弊端。
Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。


2 Collection接口

2.1单列集合框架结

-Collection接口:单列集合,用来存储一个一个的对象。
-----List接口:存储有序的、可重复的数据——>“动态”数组。
---------ArrayList、LinkedList、Vector
-----Set接口:存储无序的不可重复的数据——>高中讲的“集合”。
---------HashSet、LinkedHashSet、TreeSet

对应图示:
在这里插入图片描述

2.2 Collection接口常用方法

1、 添加
  add(Object obj)
  addAll(Collection coll)

2、 获取有效元素的个数
  int size()

3、 清空集合
  void clear()

4、 是否是空集合
  boolean isEmpty()

5、 是否包含某个元素
  boolean contains(Object obj)
 (是通过元素的equals方法来判断是否是同一个对象)
 
boolean containsAll(Collection c)
(也是调用元素的equals方法来比较的,
拿两个集合的元素挨个比较。)

6、删除
  boolean remove(Object obj) 
(通过元素的equals方法判断是否是要删除的那个元素,
只会删除找到的第一个元素)

  boolean removeAll(Collection coll):
(取当前集合的差集)

7、取两个集合的交集
  boolean retainAll(Collection c): 
(把交集的结果存在当前集合中,不影响c)

8、 集合是否相等
  boolean equals(Object obj)

9、 转成对象数组
  Object[] toArray()

10、获取集合对象的哈希值
  hashCode()

11、遍历
  iterator(): 返回迭代器对象,用于集合遍历

2.3Collection集合与数组间的转换

  1. 集合到数组的转换toArray();
//集合 --->数组:toArray()
Object[] arr = coll.toArray();
for(int i = 0;i < arr.length;i++){
    System.out.println(arr[i]);
}
  1. 数组到集合的转换:调用Arrays类的静态方法asList(T…t)
List <String> list = Arrays.asList(new String[]{"AA","BB","CC"});
System.out.println(list);

List arr1 = Arrays.asList(new int[]{123,456});
System.out.println(arr1.size());

List arr2 = Arrays.asList(new Integer[]{123,456});
System.out.println(arr2.size());

2.4使用Collection集合存储对象,要求对象所属的类满足:

向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals().


3 Iterator接口与foreach循环

3.1遍历Collection的两种方式

  1. 使用迭代器Iterator
  2. foreach循环(或增强for循环)

3.2 java.utils包下定义的迭代器接口:Iterator

  1. Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。
  2. GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不暴露该对象的内部细节。迭代器模式,就是为容器而生
  3. 作用:遍历集合Collection元素
  4. 如何获取实例:coll.iterator()返回一个迭代器实例
  5. 遍历代码实现
Iterator iterator=coll.iterator();
//hasNext():判断是否还有下一个元素
while(iterator.hasnext(){
	System.out.println(iterator.next());
}
  1. 图示说明:

在这里插入图片描述

  1. remove()的使用
    //测试Iterator中的remove()
    //如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,再调用remove都会报IllegalStateException。
    //内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
@Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);
        
        //删除集合中"Tom"
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            if("Tom".equals(obj)){
                iterator.remove();
            }
         }
        //遍历集合
        iterator = coll.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

3.3jdk5.0新特性–增强for循环:(foreach循环)

3.3.1遍历集合举例:

@Test
public void test1(){
    Collection coll = new ArrayList();
    coll.add(123);
    coll.add(456);
    coll.add(new Person("Jerry",20));
    coll.add(new String("Tom"));
    coll.add(false);
    
    //for(集合元素的类型 局部变量 : 集合对象)
    for(Object obj : coll){
       System.out.println(obj);
    }
}
说明:
内部仍然调用了迭代器。

3.3.2遍历数组举例

@Test
public void test2(){
    int[] arr = new int[]{1,2,3,4,5,6};
    //for(数组元素的类型 局部变量 : 数组对象)
    for(int i : arr){
        System.out.println(i);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值