常用的数据结构 JAVA

目录

1、线性表

复制代码
List<Object> narnat = new ArrayList<>();

ArrayList:动态数组

1、可以嵌套使用

2、add(x)添加元素x,remove(index)删除某个位置的元素

3、注意list是指向性的,在不确定被指向元素是否会发生变动,最好复制一下被指向元素

复制代码
List<Integer> none  = new ArrayList<>();
List<List<Integer>>end  = new ArrayList<>();
end.add(new ArrayList<Integer>(none));
//为了防止none后续会变动,这里直接复制none

1、Java中List类应该主要是一些方法, 方法的实现应该是在ArrayList类中实现

类似下方的A类B类代码:

java 复制代码
import java.util.*;    
public class Main {         
    public static void main(String args[]) {        
    int array[] = {1, 2, 3};
    A<int []> xxf = new B<>();
    xxf.swapp(array);
    //xxf只能调用A类方法无法调用B类
    }
}


class A <T> {
	 public void swapp(T a) {
		 B<T> d = new B<T>();
		 d.address(a);
	 }
}
 
class B <T>  extends A <T> {
	 public void address(T a) {
	     System.out.println(a);
	 }
}

2、List类是一个接口类,所以不能面向对象自己,里面只存储与线性表相关的相关方法所以比较方便

3、而ArrayList类中存在与线性表无关的方法,为了防止用户调用到错误的方法,所以创建的对象是以List开头

代码:

java 复制代码
import java.util.*;    
public class Main {         
    public static void main(String args[]) {        
   	 
    A c = new B();
    A d = c;
    
    //d只能调用A类方法 
    
    
    B f = new B();
   //f,A, B方法都可以调用
    A g = f;
    //g也只能调用A类方法
     
    }
}


class A <T> {
	 public void swapp(T a) {
		 B<T> d = new B<T>(); 
		 d.address(a);
	 }
	 public void sxx() {
		 
	 }
}
 
class B <T>  extends A <T> {
	 public void address(T a) {
	     System.out.println(a);
	 }
}
复制代码
遇到:
public void map(List<Integer> qu){
}

List<Integer> xx = ArrayList<>();

map(xx);
我的理解是:
List<Integer> qu = xx = ArrayList<>();       

代码:

java 复制代码
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.util.*;
//需要将读书页面大小调至67%
public class Main {
 public static void main(String[] args) throws AWTException {
       ArrayList<Integer> qu = new ArrayList<>();
       swap(qu);
	   System.out.println(qu);
	  }
 public static void swap (List<Integer> aa) {
	 aa.add(1);
 } 
}
 
 

4、个人理解:qu是ArrayList类创建的,但传参 变成List aa = qu = ArrayList<>(); 朴素来理解即aa虽然是ArrayList生的,是List养的,所以受List限制

这里也证实qu和aa调用的函数范围是不同的:

2、栈:

复制代码
java推荐使用:

Deque stack = new ArrayDeque<Integer>();

Deque:双向队列

1、add(x)将x放在栈顶(最后),push(x)将x放在栈首(末尾)offer(x),将x放在栈首

2、peek()、poll()、peekFirst()、pollFirst()都是对首元素进行操作这是易错点

3、peekLast(), pollLast()才是对栈顶元素操作,这么设计因为可以当队列使用尽管一般队列不用它

3、队列:

复制代码
Queue qu = new LinkedList<Integer> ();

LinkedList : 链表

1、先进先出

2、peek(x) : 显示首部元素,poll():删掉并返还首部元素

4、HashMap:

复制代码
Map<Integer, Integer> map = new HashMap<>();

1、今天才发现HashMap是dfs剪枝的一款神器!!!

2、即利用map存储dfs已算过的值,防止重复的计算,以空间换时间

偷学网上大佬的代码:

太过优雅,一点没改:整数替换

1、map<key, value>

2、containKey(n):判断key内是否存有n

3、containValue(n):判断value内是否存有n

4、get(n):通过key值n找到value值m

5、put<key, value>:存入新值

相关推荐
Dwzun5 分钟前
基于SpringBoot+Vue的二手书籍交易平台系统【附源码+文档+部署视频+讲解)
java·vue.js·spring boot·后端·spring·计算机毕业设计
期待のcode9 分钟前
Wrapper体系中的condition参数
java·spring boot·后端·mybatis
肥大毛19 分钟前
C++入门学习---结构体
开发语言·c++·学习
小明记账簿20 分钟前
JavaScript浮点数精度问题及解决方案
开发语言·javascript·ecmascript
雨中飘荡的记忆33 分钟前
Spring状态机深度解析
java·后端·spring
BBB努力学习程序设计34 分钟前
Java记录类(Records)与数据建模革命:从POJO到不可变数据的范式转变
java
南棱笑笑生35 分钟前
20251213给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时适配type-C0
linux·c语言·开发语言·rockchip
月屯41 分钟前
Pandoc 之--pdf-engine
java·开发语言·pdf
长安er1 小时前
LeetCode 83/237/82 链表删除问题-盒子模型
数据结构·算法·leetcode·链表·力扣