java集合框架

本文详细介绍了Java集合框架中的ArrayList、Vector和LinkedList的常用方法,并展示了如何使用Iterator接口。此外,还概述了Collection接口的继承关系,以及Map和Set接口的基本概念和用途。示例代码演示了各种集合类的方法应用,包括添加、删除、查找和遍历元素等操作。


在这里插入图片描述

上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等

集合的特点:
集合用来存储不同类型的对象(基本数据类型除外),存储长度可变。
Java集合中实际存放的只是对象的引用,每个集合元素都是一个引用变量,实际内容都放在堆内存或者方法区里面,但是基本数据类型是在栈内存上分配空间的,栈上的数据随时就会被收回的。

ArrayList常用方法的运用

import java.util.ArrayList;
import java.util.Arrays;
/*
   ArrayList常用方法的运用
 */

public class Demo1 {
    public static void main(String[] args){
        //ArrayList: 使用的是数组结构,对于增加删除慢,查找快
        ArrayList<Integer> data = new ArrayList<>();
        data.add(100);   //将指定的元素添加到此列表的末尾
        data.add(200);
        data.add(300);
        data.add(2,121);  //将指定的元素添加到指定的未知
        System.out.println(data.get(0)); //得到指定位置的元素
         // data.clear(); //删除所有元素
        System.out.println(data.get(2));
        data.indexOf(0);  //返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。
        System.out.println(data.get(0));
        data.remove(0);  //删除此列表中指定位置的元素
        System.out.println(data.get(0));
        data.set(1,110);  //set用于指定元素替换指定位置的元素,前面是位置,后面是元素
        System.out.println(data.get(1));
        int i = data.size();   //返回此列表中的元素素
        System.out.println(i);
        System.out.println(Arrays.toString(data.toArray()));  //以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。
    }
}

Vector常用方法的运用

import java.util.Arrays;
import java.util.Vector;
/*
    Vector常用方法的运用
 */

public class Demo2 {
    public static void main(String[] args) {
        //Vector : 使用的是数组结构,对于增加删除慢,查找快
        Vector<Integer> data = new Vector<>();
        data.add(111);
        data.add(112);  //将指定元素插入此Vector中的指定位置
        System.out.println(data.get(0)); //返回此Vector中指定位置的元素。
        data.add(1,123);  //将指定元素插入此Vector中的指定位置
        data.add(2,110);
        System.out.println(data.get(1));
        data.remove(1);  //删除此Vector中的指定位置的指定元素
        System.out.println(data.get(1));
        System.out.println(data.hashCode());  //返回此Vector的哈希码值。
        data.set(1,125);  //用指定的元素替换此Vector中指定位置的元素
        System.out.println(data.get(1));
        System.out.println(data.size()); //返回此向量中的组件数。
        System.out.println(Arrays.toString(data.toArray()));  //以正确的顺序返回包含此Vector中所有元素的数组
        System.out.println(data.toString());  //返回此Vector的字符串表示形式,包含每个元素的String表示形式。
    }
}

LinkedList常用方法的运用

public class Demo3 {
    public static void main(String[] args) {
        //LinkedList :  使用的是双向链表结构,对于增加删除快,查找慢
        LinkedList<Integer> data = new LinkedList<>();
        //将指定元素插入此列表中的指定位置。
        data.add(0,100);
        //将指定的元素追加到此列表的末尾
        data.add(110);
        //在此列表的开头插入指定的元素。
        data.addFirst(222);
        //将指定的元素追加到此列表的末尾
        data.addLast(333);
        //返回此列表中指定位置的元素
        System.out.println(data.get(0));
        //返回此列表中的第一个元素
        System.out.println(data.getFirst());
        //返回此列表中的最后一个元素
        System.out.println(data.getLast());
        //删除此列表中指定位置的元素
        data.remove(1);
        //检索并删除此列表的头部(第一个元素)
        data.remove();
        //压栈
        data.push(100);
        data.push(200);
        //弹栈
        Integer i = data.pop();
        System.out.println(i);
        //用指定元素替换指定位置的元素
        data.set(1,369);
        System.out.println(data.get(1));
        //返回此列表中的元素数。
        System.out.println(data.size());
        //以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。
        System.out.println(Arrays.toString(data.toArray()));




    }
}

Iterator接口的运用

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
  Iterator接口的运用 
 */

public class Demo4 {
    public static void main(String[] args) {
        //Iterator
        //ListIterator
        ArrayList<Integer> data = new ArrayList<>();
        data.add(1);
        data.add(2);
        data.add(3);
        data.add(4);
        data.add(5);
        /*Iterator<Integer> iterator = data.iterator();
        while (iterator.hasNext()){
            Integer i = iterator.next();
            System.out.println(i);
        }
        //返回列表中的下一个元素并前进光标位置
        iterator.next();
        //从列表中删除 next()或 previous() (可选操作)返回的最后一个元素。
        iterator.remove();
        System.out.println(data.size());*/
        ListIterator<Integer> iterator = data.listIterator();
        iterator.add(100);
        iterator.next();
        //返回列表中的下一个元素并前进光标位置。
        iterator.next();
        System.out.println(iterator.next());

    }
}

Collection (集合的最大接口)继承关系

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行,一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”,如List和Set。
所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection;有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
(1)List:有序,可以存放重复的内容
(2)Set:无序,不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分
(3)Queue:队列接口
(4)SortedSet:可以对集合中的数据进行排序

Map接口

Map是一种把键对象和值对象进行关联的容器,而一个值对象又可以是一个Map,依次类推,这样就可形成一个多级映射。对于键对象来说,像Set一样,一个Map容器中的键对象不允许重复,这是为了保持查找结果的一致性;如果有两个键对象一样,那你想得到那个键对象所对应的值对象时就有问题了,可能你得到的并不是你想的那个值对象,结果会造成混乱,所以键的唯一性很重要,也是符合集合的性质的。当然在使用过程中,某个键所对应的值对象可能会发生变化,这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上,这不会发生任何问题(不过对你的使用却可能会造成不便,你不知道你得到的到底是那一个键所对应的值对象)。
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
注意:由于Map中作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。

实现Map接口的子类:
——Hashtable:Hashtable继承Dictionary<K,V>类,实现了Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。是同步的。
——HashMap:HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
——LinkedHashMap:是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。Key和Value都允许空;Key重复会覆盖、Value允许重复;非线程安全;有序。
——TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

Set接口

该Set接口放置额外的约定,超过从继承Collection接口,所有构造函数的合同,而位于该合同add , equals和hashCode方法。 为方便起见,此处还包括其他继承方法的声明。 (这些声明附带的规范是针对Set接口定制的,但它们不包含任何其他规定。)

注意:如果将可变对象用作set元素,则必须非常小心。 如果在对象是集合中的元素时以影响equals比较的方式更改对象的值,则不指定集合的行为。 这种禁令的一个特例是,不允许将一个集合作为一个元素包含在内。

方法运用:

变量和类型方法描述
booleanadd​(E e)如果指定的元素尚不存在,则将其添加到此集合(可选操作)。
booleanaddAll​(Collection<? extends E> c)如果指定集合中的所有元素尚未存在(可选操作),则将其添加到此集合中。
voidclear()从该集合中删除所有元素(可选操作)。
booleancontains​(Object o)如果此set包含指定的元素,则返回 true 。
booleancontainsAll​(Collection<?> c)如果此集合包含指定集合的所有元素,则返回 true 。
static SetcopyOf​(Collection<? extends E> coll)返回包含给定Collection的元素的 unmodifiable Set 。
booleanequals​(Object o)将指定对象与此set进行相等性比较。
inthashCode()返回此set的哈希码值。
booleanisEmpty()如果此集合不包含任何元素,则返回 true 。
Iteratoriterator()返回此set中元素的迭代器。
static Setof()返回包含零元素的不可修改集。
static Setof​(E e1, E e2, E e3, E e4, E e5, E e6)返回包含六个元素的不可修改集。
static Setof​(E e1, E e2, E e3, E e4, E e5, E e6, E e7)返回包含七个元素的不可修改集。
booleanremove​(Object o)如果存在,则从该集合中移除指定的元素(可选操作)。
booleanremoveAll​(Collection<?> c)从此集合中删除指定集合中包含的所有元素(可选操作)。
booleanretainAll​(Collection<?> c)仅保留此集合中包含在指定集合中的元素(可选操作)。
intsize()返回此集合中的元素数(基数)。
Object[]toArray()返回包含此set中所有元素的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值