没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
文章目录一.线性表1.顺序表的实现静态数组动态数组2.链表的实现二.栈三.队列四.串StringString StringBuffer 和 StringBuilder五.树和二叉树六.哈希表七. 图邻接矩阵邻接表 一.线性表 1.顺序表的实现 静态数组 java只有在为数组分配变量时,可以声明数组长度 java:int[] a; a = new int [3];//可以用变量 但是java的数组是比较特殊的对象,所以需要借助别的类来实现数组的一些 (1)取值 a[i][j] (2)遍历可以采用foreach的形式for(int
资源推荐
资源详情
资源评论
【蓝桥杯】必备的【蓝桥杯】必备的java数据结构和常用方法数据结构和常用方法
文章目录文章目录一.线性表1.顺序表的实现静态数组动态数组2.链表的实现二.栈三.队列四.串StringString StringBuffer 和 StringBuilder
五.树和二叉树六.哈希表七. 图邻接矩阵邻接表
一一.线性表线性表
1.顺序表的实现顺序表的实现
静态数组静态数组
java只有在为数组分配变量时,可以声明数组长度
java:int[] a;
a = new int [3];//可以用变量
但是java的数组是比较特殊的对象,所以需要借助别的类来实现数组的一些
(1)取值取值 a[i][j] (2)遍历遍历可以采用foreach的形式for(int c : a){}
(3)增加增加(插入插入),删除删除都需要根据数组的规律将后置位的元素移动;修改,直接修改
(4)查找查找调用Arrays类的binarySearch 方法(二分查找)
int a[] = {1,2,3};
int x;
x= Arrays.binarySearch(a, 2);
(5)排序排序 Arrays.sort方法
public static void sort(doule a[])
public static void sort(doule a[],int start,int end);
int []a = {55,33,44,22,11};
int []b = Arrays.copyOfRange(a, 1, 4);
Arrays.sort(a, 1, 4);
(6)数组复制数组复制 Arrays.copyOf
copyOf方法原型:public static float[] copyOf(float []original,int newLength)
从数组的第一个元素开始复制,复制长度为length,若长度超过数组原长,则超出元素为默认值0
int []a = {11,22,33,44,55};
int []b = Arrays.copyOf(a, 7);
copyOfRange方法原型:public static double[] copyOfRange(double []original,int from,int to)
从original下标为from的位置开始复制,到to-1的位置结束,返回一个长度为to-from的数组== 下标范围这种的基本都是从from
到to-1所指的元素==
(7)数组转数组转list
Arrays.asList(T… a) 或者Collections.addAll
因为前者返回的是list对象没有增删,只能查改
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,
充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
//int[]不能直接转成不能直接转成integer的的list
String[] strArray = new String[2];
ArrayList list = new ArrayList(Arrays.asList(strArray)) ;
//或者里面直接是一个数组
String[] strArray = new String[2];
ArrayList arrayList = new ArrayList(strArray.length);
Collections.addAll(arrayList, strArray);
(8)初始化初始化:Arrays.fill
(1)public static void fill(byte[] a, byte val)
将指定的 byte 值分配给指定 byte 节型数组的每个元素。
(2)public static void fill(byte[] a,int fromIndex,int toIndex,byte val)
将指定的 byte 值分配给指定 byte 型数组指定范围中的每个元素。填充的范围从索引 fromIndex(包括)一直到索引
toIndex(不包括)。(如果 fromIndex==toIndex,则填充范围为空。)
动态数组动态数组
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能
和Vector不同,ArrayList中的操作不是线程安全的!
(1)构造构造
// 默认构造函数
ArrayList()
// capacity是ArrayList的默认容量大小。当由于增加数据导致容量不足时,容量会添加上一次容量大小的一半。
ArrayList(int capacity)
// 创建一个包含collection的ArrayList
ArrayList(Collection collection)
(2)取值取值: get(int index)
(3)增删改查增删改查(自动移位)
boolean add(Element e)增加指定元素到链表尾部.
void add(int index, Element e)增加指定元素到链表指定位置.
void clear()从链表中删除所有元素.
E remove(int index)删除链表中指定位置的元素.
protected void removeRange(int start, int end)删除链表中从某一个位置开始到某一个位置结束的元素。
E set(int index, E element)将链表中指定位置上的元素替换成新元素。注意不能直接赋值
boolean contains(Object o)如果链表包含指定元素,返回true.
int indexOf(Object o)返回元素在链表中第一次出现的位置,如果返回-1,表示链表中没有这个元素。
int lastIndexOf(Object o)返回元素在链表中最后一次出现的位置,如果返回-1,表示链表中没有这个元素。
(4)逆置逆置
Collections.reverse(lists);
(5)排序排序
Collections.sort()传入ArrayList,会采用默认的方式进行排序(字典序)
2.链表的实现链表的实现
LinkedList和ArrayList一样是实现了List,API没太大区别,但是本质上还是有些区别
ArrayList底层是数组结构,LinkList底层是链表结构。
1.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
二二.栈栈
Stack来自于Vector,那么显然stack的底层实现是数组。
java中Stack只有一个无参构造函数。
属于stack自己的方法包括
push( num) //入栈
pop() //栈顶元素出栈
empty() //判定栈是否为空
peek() //获取栈顶元素
search(num) //判端元素num是否在栈中,如果在返回1,不在返回-1。
注意pop()和peek()的区别。pop()会弹出栈顶元素并返回栈顶的值,peek()只是获取栈顶的值,但是并不会把元素从栈顶弹出
来。
Stack st = new Stack();
三三.队列队列
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。虽然是线程不安全和非阻塞的,但是在一般的问
题中足够了.
Queue queue = new LinkedList();
add()和remove()方法在失败的时候会抛出异常(不推荐)queue的增加元素方法add和offer的区别在于,add方法在队列满的情
况下将选择抛异常的方法来表示队列已经满了,而offer方法通过返回false表示队列已经满了;在有限队列的情况,使用offer
方法优于add方法
public boolean offer(E e),向链表末尾添加元素,返回是否成功;
public boolean offerFirst(E e),头部插入元素,返回是否成功;
public boolean offerLast(E e),尾部插入元素,返回是否成功;
public void clear(),清空链表;
public E poll(),删除并返回第一个元素;
剩余11页未读,继续阅读
资源评论
weixin_38637918
- 粉丝: 9
- 资源: 946
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功