常用的数据结构 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>:存入新值

相关推荐
CyberMuse9 分钟前
表的数据结构和常见操作
数据结构
爱吃生蚝的于勒11 分钟前
C语言最简单的扫雷实现(解析加原码)
c语言·开发语言·学习·计算机网络·算法·游戏程序·关卡设计
Ai 编码助手14 分钟前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm16 分钟前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm17 分钟前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database
何曾参静谧17 分钟前
「QT」文件类 之 QDir 目录类
开发语言·qt
何曾参静谧19 分钟前
「QT」文件类 之 QTemporaryDir 临时目录类
开发语言·qt
尼克_张19 分钟前
tomcat配合geoserver安装及使用
java·tomcat
杜杜的man21 分钟前
【go从零单排】Directories、Temporary Files and Directories目录和临时目录、临时文件
开发语言·后端·golang
qq_3089574722 分钟前
Gin 框架入门(GO)-1
开发语言·golang·gin