Java集合复习


前言

由于之前的类对多个对象进行操作时,扩展性和适应性相对较差,所以java提供了集合框架来供我们灵活地操作对象组。
集合有以下三个特点:(1)长度可变;(2)只能存储引用类型;(3)可以存储多种引用类型。
java集合框架主要包括两种,一种是集合(Collection),存储一个元素集合,另一种是图(Map),用来存储键值对映射。

集合框架

Collection接口

Collection接口又有3种子类型:List、Set和Queue,之所以定义多个接口,是为了以不同的方式操作集合对象;再下面是一些抽象类,上图省略了抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、HashMap等等。

由于Collection是集合继承结构中的根接口,定义的是集合的共性功能,该接口的主要功能如下:

(1)添加操作
在这里插入图片描述

(2)移除操作
在这里插入图片描述

(3)判断是否包含元素功能
在这里插入图片描述

(4)获取集合大小和元素的功能
在这里插入图片描述

迭代器接口Iterator,实现该接口的迭代器对象可以用来遍历集合中的元素,该接口的主要方法包括:

在这里插入图片描述

集合使用

  • 首先创建集合对象,例如Collection c = new ArrayList();
  • 创建元素对象,并利用c.add(E e)将元素e添加到集合中;
  • 通过集合对象获取迭代器对象,然后利用hasNext()和next()进行遍历。
    在这里插入图片描述

List集合

  • ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全;
  • LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全;
  • Vector:底层数据是数组,查询快,增删慢,线程安全。

去除掉ArrayList中的重复元素:
利用LinkedList模拟栈数据结构的集合在这里插入图片描述
利用LinkedList模拟栈数据结构的集合,并测试:

public class MyStack<E> {
	private LinkedList<E> list;
    public MyStack(){
        list = new LinkedList<E>();
    }
    public void push(E e){
        list.add(e);
    }
    public E pop(){
        E e = list.removeLast();
        return e;
    }
    public E peek(){
        E e = list.getLast();
        return e;
    }
    public boolean isEmpty(){
        if(list.size()==0) {return true;}
        else {return false;}
    }

}
public class Test {
	public static void main(String[] args) {
	MyStack<String> st = new MyStack<String>();
    st.push("hello");
    st.push("world");
    System.out.println(st.isEmpty());
    String s1 = st.pop();
    System.out.println(s1);
    String s2 = st.pop();
    System.out.println(s2);
    System.out.println(st.isEmpty());
	}

}

Set集合

Set集合的特点:存储的元素无序,并且不重复。

  • HashSet:底层数据结构是哈希表,哈希表保证元素唯一性的两个方法是hashCode()和equals,首先判断对象的哈希值是否相同,如果不同,就直接添加到集合中;如果相同,则执行equals()进行比较,若返回false,就直接添加到集合,否则不添加。
  • LinkedHashSet:底层数据结构是哈希表和链表,哈希表表征元素唯一性,链表保证元素有序,且存储顺序和取出顺序一致。
  • TreeSet:底层结构是红黑树,平衡二叉树,集合中的元素不重复,并且按照要求排序,具体为在添加元素时,会和之前的元素比较,若返回值为正数,则往后添加,返回负数,则往前添加,返回0,则说明重复,不添加。
  • 一般要求集合有序时,使用TreeSet,否则使用HashSet。

Map集合

Map中的每一个元素是一个键值对,键唯一,值可以重复,它的实现类的数据结构只针对键有效,跟值无关。

在这里插入图片描述

  • 统计字符串中字符的个数:

在这里插入图片描述

Java泛型

泛型是将所操作的数据类型指定为一个参数,它允许在编译时刻检测到非法类型。
假设我们不仅想要比较两个整数的大小,还想要比较浮点数、字符间的大小,可以使用泛型。

在这里插入图片描述

泛型类和非泛型类声明类似,除了在类名后面添加类型参数声明部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值