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

相关推荐
想不到耶24 分钟前
Vue3轮播图组件,当前轮播区域有当前图和左右两边图,两边图各显示一半,支持点击跳转和手动滑动切换
开发语言·前端·javascript
虾球xz25 分钟前
CppCon 2016 学习:BUILDING A MODERN C++ FORGE FOR COMPUTE AND GRAPHICS
开发语言·c++·学习
一坨阿亮27 分钟前
MyBatis原理
java·开发语言·mybatis
不太可爱的叶某人1 小时前
【学习笔记】深入理解Java虚拟机学习笔记——第7章 虚拟机类加载机制
java·笔记·学习
爱喝阔落的猫2 小时前
【JVM 07-运行时常量池重要组成部分-StringTable】
开发语言·jvm·python
狐凄2 小时前
Python实例题:图片批量处理工具
开发语言·python
CUIYD_19892 小时前
Spring MVC 处理静态资源请求 - ResourceHandler
java·spring·mvc
k *2 小时前
数据结构--栈和队列
数据结构
晴空月明2 小时前
Java 集合框架底层数据结构实现深度解析
java
louisgeek2 小时前
Java Creational 创建型模式之 Builder 建造者模式
java