集合框架(List容器)
>两大主流:collection、map(接口)
底层实现为数组和链表;
RationalRose工具:接口与典型实现类;
List :数据是有序的(时间上有序,存放时间顺序存放),可以存放重复元素;
Set:数据是无序的,不可以存放重复元素;
>ArrayList/Vector/LInkedList(区别是Vector是线程安全的,其他功能相同,都实现了相同的规范List)
注意:
即使在线程不安全的情况下,也不推荐使用Vector类(已经过时),而是使用Collections工具类将ArrayList转换成线程安全的类;
ArrayList与LinkedList的区别:ArrayList底层是使用数组存储的;LinkedList底层使用链表存储的;
链表:修改比较快,查找比较慢;
数组:查找比较快,修改比较慢;
ArrayList常用方法:
add();//添加一个元素;
addAll();//将一个容器中全部元素加入到当前list后面;
get();//得到指定位位置上的元素(不真正取出元素);
remove();//拿出指定位置上的元素(取出元素);
size();//返回长度;
ArrayList 中的ensureCapacity(int minCapticy)方法:
ensureCapacity(int minCapacity) 如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。 |
>自己实现一个简单的ArrayList
package com.ls.list;import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class MyArrayList implements List {private int size = 10;private int current = 0;Object[] obj = new Object[size];/*** 用来确定容量是否到达极限 这里涉及问题,如何扩充数组? 新建一个更大的(比如两倍,将原来的数组中的拷贝过来)* * @param minCapacity*/private void ensureCapcity(int minCapacity) {if (minCapacity > size) {// 数组放不下,需要扩充数组/*** 新建一个长度为当前数组两倍的数组 * 将原来数组中的内容拷贝到新的数组当中 * 将全局变量的数组的引用指向新定义的数组,更新size*/// 下面注释的这种方式性能不行// Object[] newobj=new Object[size*2];// for (int i = 0; i < obj.length; i++) {// newobj[i]=obj[i];// }// obj=newobj;// size=size*2;/*** System类的一个底层语言的native方法(不好用)* Arrays类的方法;*///System.arraycopy(src, srcPos, dest, destPos, length);obj= Arrays.copyOf(obj, size*2);size=size*2;} else {}}@Overridepublic boolean add(Object e) {// 判段是否到达极限ensureCapcity(current + 1);// 添加一个数据;obj[current++] = e;return false;}@Overridepublic void add(int index, Object element) {// TODO Auto-generated method stub}@Overridepublic boolean addAll(Collection c) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean addAll(int index, Collection c) {// TODO Auto-generated method stubreturn false;}@Overridepublic void clear() {// TODO Auto-generated method stub}@Overridepublic boolean contains(Object o) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean containsAll(Collection c) {// TODO Auto-generated method stubreturn false;}@Overridepublic Object get(int index) {return obj[index];}@Overridepublic int indexOf(Object o) {// TODO Auto-generated method stubreturn 0;}@Overridepublic boolean isEmpty() {// TODO Auto-generated method stubreturn false;}@Overridepublic Iterator iterator() {// TODO Auto-generated method stubreturn null;}@Overridepublic int lastIndexOf(Object o) {// TODO Auto-generated method stubreturn 0;}@Overridepublic ListIterator listIterator() {// TODO Auto-generated method stubreturn null;}@Overridepublic ListIterator listIterator(int index) {// TODO Auto-generated method stubreturn null;}@Overridepublic boolean remove(Object o) {// TODO Auto-generated method stubreturn false;}@Overridepublic Object remove(int index) {// TODO Auto-generated method stubreturn null;}@Overridepublic boolean removeAll(Collection c) {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean retainAll(Collection c) {// TODO Auto-generated method stubreturn false;}@Overridepublic Object set(int index, Object element) {// TODO Auto-generated method stubreturn null;}@Overridepublic int size() {// 集合大小return current;}@Overridepublic List subList(int fromIndex, int toIndex) {// TODO Auto-generated method stubreturn null;}@Overridepublic Object[] toArray() {// TODO Auto-generated method stubreturn null;}@Overridepublic Object[] toArray(Object[] a) {// TODO Auto-generated method stubreturn null;}}
package com.ls.list;import java.util.List;
//测试类
public class TestMyArray {public static void showList(List list){for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}
} public static void main(String[] args) {MyArrayList list=new MyArrayList();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");list.add("g");list.add("h");list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");list.add("g");list.add("h");showList(list);
}
}
>自己实现一个简单的LinkedList
//LinkedList原码,内部类模拟一个节点:
>Queue接口(队列)
方法摘要 | |
---|---|
boolean
|
add(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 |
E
|
element() 获取,但是不移除此队列的头。 |
boolean
|
offer(E e) 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E) ,后者可能无法插入元素,而只是抛出一个异常。
|
E
|
peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。 |
E
|
poll() 获取并移除此队列的头,如果此队列为空,则返回 null。 |
E
|
remove() 获取并移除此队列的头。 |
>Deque接口(双端队列)
方法摘要 | |
---|---|
boolean
|
add(E e) 将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出 IllegalStateException。 |
void
|
addFirst(E e) 将指定元素插入此双端队列的开头(如果可以直接这样做而不违反容量限制)。 |
void
|
addLast(E e) 将指定元素插入此双端队列的末尾(如果可以直接这样做而不违反容量限制)。 |
boolean
|
contains(Object o) 如果此双端队列包含指定元素,则返回 true。 |
Iterator<E>
|
descendingIterator() 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。 |
E
|
element() 获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。 |
E
|
getFirst() 获取,但不移除此双端队列的第一个元素。 |
E
|
getLast() 获取,但不移除此双端队列的最后一个元素。 |
Iterator<E>
|
iterator() 返回以恰当顺序在此双端队列的元素上进行迭代的迭代器。 |
boolean
|
offer(E e) 将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用的空间,则返回 false。 |
boolean
|
offerFirst(E e) 在不违反容量限制的情况下,将指定的元素插入此双端队列的开头。 |
boolean
|
offerLast(E e) 在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。 |
E
|
peek() 获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null。 |
E
|
peekFirst() 获取,但不移除此双端队列的第一个元素;如果此双端队列为空,则返回 null。 |
E
|
peekLast() 获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。 |
E
|
poll() 获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null。 |
E
|
pollFirst() 获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null。 |
E
|
pollLast() 获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null。 |
E
|
pop() 从此双端队列所表示的堆栈中弹出一个元素。 |
void
|
push(E e) 将一个元素推入此双端队列所表示的堆栈(换句话说,此双端队列的头部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出 IllegalStateException。 |
E
|
remove() 获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。 |
boolean
|
remove(Object o) 从此双端队列中移除第一次出现的指定元素。 |
E
|
removeFirst() 获取并移除此双端队列第一个元素。 |
boolean
|
removeFirstOccurrence(Object o) 从此双端队列移除第一次出现的指定元素。 |
E
|
removeLast() 获取并移除此双端队列的最后一个元素。 |
boolean
|
removeLastOccurrence(Object o) 从此双端队列移除最后一次出现的指定元素。 |
int
|
size() 返回此双端队列的元素数。 |
>LinkedList
LinkedList list=new LinkedList();
>List特征
list.add();
list.get();
>queue特征:进行插入操作的端称为队尾,进行删除操作的端称为队头。
list.add();
list.poll();//获取头,并移除;
list.peek();//获取头,不移除
>stack特征:仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
list.add();
list.push();//压栈;
list.peek();//出栈;
>Deque特征:队头和队尾都可以进行插入,删除操作。
list.add();
list.addFirst();
list.addLast();
list.removeLast();
list.removefirst();
>LinkedList API文档
方法摘要 | ||
---|---|---|
boolean
|
add(E e) 将指定元素添加到此列表的结尾。 |
|
void
|
add(int index, E element) 在此列表中指定的位置插入指定的元素。 |
|
boolean
|
addAll(Collection<? extends E> c) 添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。 |
|
boolean
|
addAll(int index, Collection<? extends E> c) 将指定 collection 中的所有元素从指定位置开始插入此列表。 |
|
void
|
addFirst(E e) 将指定元素插入此列表的开头。 |
|
void
|
addLast(E e) 将指定元素添加到此列表的结尾。 |
|
void
|
clear() 从此列表中移除所有元素。 |
|
Object
|
clone() 返回此 LinkedList 的浅表副本。 |
|
boolean
|
contains(Object o) 如果此列表包含指定元素,则返回 true。 |
|
Iterator<E>
|
descendingIterator() 返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。 |
|
E
|
element() 获取但不移除此列表的头(第一个元素)。 |
|
E
|
get(int index) 返回此列表中指定位置处的元素。 |
|
E
|
getFirst() 返回此列表的第一个元素。 |
|
E
|
getLast() 返回此列表的最后一个元素。 |
|
int
|
indexOf(Object o) 返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。 |
|
int
|
lastIndexOf(Object o) 返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。 |
|
ListIterator<E>
|
listIterator(int index) 返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。 |
|
boolean
|
offer(E e) 将指定元素添加到此列表的末尾(最后一个元素)。 |
|
boolean
|
offerFirst(E e) 在此列表的开头插入指定的元素。 |
|
boolean
|
offerLast(E e) 在此列表末尾插入指定的元素。 |
|
E
|
peek() 获取但不移除此列表的头(第一个元素)。 |
|
E
|
peekFirst() 获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。 |
|
E
|
peekLast() 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。 |
|
E
|
poll() 获取并移除此列表的头(第一个元素) |
|
E
|
pollFirst() 获取并移除此列表的第一个元素;如果此列表为空,则返回 null。 |
|
E
|
pollLast() 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。 |
|
E
|
pop() 从此列表所表示的堆栈处弹出一个元素。 |
|
void
|
push(E e) 将元素推入此列表所表示的堆栈。 |
|
E
|
remove() 获取并移除此列表的头(第一个元素)。 |
|
E
|
remove(int index) 移除此列表中指定位置处的元素。 |
|
boolean
|
remove(Object o) 从此列表中移除首次出现的指定元素(如果存在)。 |
|
E
|
removeFirst() 移除并返回此列表的第一个元素。 |
|
boolean
|
removeFirstOccurrence(Object o) 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。 |
|
E
|
removeLast() 移除并返回此列表的最后一个元素。 |
|
boolean
|
removeLastOccurrence(Object o) 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。 |
|
E
|
set(int index, E element) 将此列表中指定位置的元素替换为指定的元素。 |
|
int
|
size() 返回此列表的元素数。 |
|
Object[]
|
toArray() 返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。 |
|
|
toArray(T[] a) 返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。 |
集合框架(List容器)相关推荐
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...
本文关键词: java集合框架 框架设计理念 容器 继承层级结构 继承图 集合框架中的抽象类 主要的实现类 实现类特性 集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...
- Java基础_集合框架1
一.集合框架(体系概述) 为什么会出现集合框架(集合类)? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合框架 ...
- 容器(一)剖析面试最常见问题之 Java 集合框架
转载自https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/Java%E9%9B%86%E5%90%88%E ...
- Java 容器集合框架概览
Java Collections Framework 集合的概念 集合collection,有时叫做容器container,把多个元素组成一个单元. 早期的Java (pre-1.2) 中包含了Vec ...
- java 有序容器_Java 容器集合框架概览
Java Collections Framework 集合的概念 集合collection,有时叫做容器container,把多个元素组成一个单元. 早期的Java (pre-1.2) 中包含了Vec ...
- Java【7】工具包(集合框架、函数式编程、Optional容器)
目录 1.集合与Collection集合接口 2.List集合接口 3.LinkedList分析 4.Map接口及其操作 5.HashMap 6.Set集合接口 7.Iterator接口 8.小结:J ...
- java api 框架_java常用对象API之集合框架
说到集合框架,其实刚开始学的时候有点自我感觉很简单,自己认为就是集合类中的框架之类的,但是当自己简单把它过了一变后发现懵里懵懂的,什么都没懂,于是自己又认认真真的看了一遍,才弄明白. 说到集合框架就不 ...
- spring 全局变量_[Spring]-Spring框架-02-IOC容器
Spring框架 IOC容器 理解IOC容器和DI依赖注入 IOC容器 Inverser Of Control反转控制 就是把原来在程序中创建HelloService对象的控制权限交给Spring管理 ...
- Java集合框架综述,这篇让你吃透!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...
- java集合框架史上最详解(list set 以及map)
title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...
最新文章
- 两个小模型就能吊打大模型!北大校友、谷歌华人一作「模型集合」,CNN、Transformer都适用!...
- 现代操作系统: 第九章 安全
- 老司机带你深入浅出 Collection
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件 .
- CS231n Convolutional Neural Networks for Visual Recognition------Numpy Tutorial
- 写得好的html网页,优化网站排名-使用Markdown编写更好的内容和HTML
- speak 计算机英语作文,跪求一篇英语作文 题目:论计算机的优缺点
- 工业机器人操作机设计原则和设计方法
- linux恢复表数据,Linux恢复误删的数据
- 服务器数码管不显示,LED数码管不亮的原因及故障排查方法
- SpringMvc类型转换器
- 安装原生Win7-SP1系统
- Unfinished
- 韩服跑跑卡丁车 赛车大全
- Apache Avro项目简介
- EXCEL 单元格如何显示输入的首个单引号字符
- Latex第一次写论文记录
- linux下gz和tar.gz、zip压缩解压
- 手把手教你搭建深度学习环境
- 关于出现error: expected declaration or statement at end of input [solution.c]