【Java】十一、数据结构与集合框架

List接口与Set接口

set中的元素无重复、无序;检索效率低,插入与删除效率高,且不会改变元素位置;实现类有HashSet,TreeSet

List中的元素有序、可重复;检索效率高,插入与删除效率低(因为会引起其它元素位置的改变);可动态改变自身大小;实现类有ArrayList,LinkedList,Vector

链表LinkedList与数组ArrayList

一般用ArrayList

二者对比

①LinkedList基于双向链表实现;ArrayList基于一段连续空间(数组)实现

②对于随机访问(查找),ArrayList(O(1))优于LinkedList(O(n))

③对于插入与删除,LinkedList优于ArrayList

④对于空间复杂度,ArrayList优于LinkedList。因为LinkedList各节点存储数据与两个引用。ArrayList每次增加容量时约增长50%

LinkedList

import java.util.LinkedList;

LinkedList<数据类型> list = new LinkedList<数据类型>();

常用方法

向指定位置插入元素,默认在末尾list.add((index, )元素);

头部添加元素list.addFirst(元素);

尾部添加元素(等同于add())list.addLast(元素);

移除首个元素list.removeFirst();

移除末尾元素list.removeLast();

返回首个元素list.getFirst();

返回末尾元素list.getLast();

返回数组大小list.size();

迭代元素:

for (int i = 0; i < list.size(); i++) {};

for (数据类型 i : list) {};

ArrayList

import java.util.ArrayList;

ArrayList<引用数据类型> list = new ArrayList<引用数据类型>();

常用方法

向指定位置插入元素,默认在末尾list.add((index, )元素);

返回指定位置元素list.get(index);

修改指定位置元素list.set(index, 元素);

移除元素或指定位置的元素list.remove(元素/index);(移除整形需要(Integer)n)

排序元素:

list.sort();//升序

list.sort(Comparator.reverseOrder());//降序

返回数组大小list.size();

迭代元素:

for (int i = 0; i < list.size(); i++) {};

for (数据类型 i : list) {};

LinkedList与ArrayList的其它方法

向指定位置插入一个集合,默认在末尾list.addAll((index, )collection);

判断是否含有某一元素list.contains(元素);

返回元素第一次出现的索引list.indexOf(元素);

返回元素最后一次出现的索引list.lastIndexOf(元素);

栈Stack

构造函数

Stack()只能创建空栈

Stack st = new Stack();

方法

判断栈是否为空

st.empty();

或st.isEmpty();(Stack继承Vector的方法)

查看栈顶

st.peek();

移除并返回栈顶

st.pop();

e.g.

int a = (Integer) st.pop();

压栈

st.push();

查找对象并返回下标,以1为基数(从1开始的下标)

st.search(obj);

队列Queue

java基于LinkedList实现队列结构

构造函数

Queue<int[]> queue = new LinkedList<int[]>();  // 数组本身是引用类型

方法

入队queue.offer(e);

出队并返回queue.poll(e);

判断队列是否为空queue.isEmpty();

查看头部queue.peek();  // 为空则返回null

双向队列Deque

java基于LinkedList实现双向队列

构造函数

Deque<String> deque = new LinkedList<>();

方法

Queue方法后加First或Last

集合HashSet

类似集合的定义:无重复元素、无序

构造

import java.util.HashSet;

HashSet<引用数据类型> set = new HashSet<引用数据类型>();

常用方法

添加元素set.add(元素);

判断元素是否存在set.contains(元素);

删除元素set.remove(元素);

删除所有元素set.clear();

计算大小set.size();

迭代HashSet:

for (数据类型 i : set) {};

散列表HashMap

类似字典定义:键值对、无序、访问速度快

构造

import java.util.HashMap;

HashMap<引用数据类型, 引用数据类型> map = new HashMap<引用数据类型, 引用数据类型>();

常用方法

添加键值对map.put(key, value);

访问元素map.get(key);

删除元素map.remove(key);

删除所有元素map.clear();

计算大小map.size();

迭代HashMap:

①获取key,并获取value

for (Integer i : map.keySet()) {map.get(i));}

其中keySet()方法用于获取key,get()方法获取value

②只获取value

for(String value: map.values()) {}

其中values()方法用于获取value

迭代器Iterator

一种访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合

构造

import java.util.Iterator;

Iterator<引用数据类型> it = 集合对象(list、map等).iterator();

常用方法

返回下一元素并更新迭代器状态it.next();

判断是否还有下一元素it.hasNext();

删除当前元素it.remove();

循环迭代器:

while(it.hasNext()) {System.out.println(it.next());}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值