在实践中学Java(下)高级

发布于:2025-09-05 ⋅ 阅读:(14) ⋅ 点赞:(0)

Java 数据结构

  • 数组Arrays
  • 列表Lists
  • 集合Sets
  • 映射Maps
## Java HashMap
HashMap存储健值对,无序。

```java
//初始化赋值
Map<Integer, String> map = Map.of(key1, value1,...,keyn, valuen);// 元素是对象,基本元素可使用对应包装类
//创建HashMap对象
HashMap<Integer, String> map = new HashMap<Integer, String>();

//方法
map.put(keyi, valuei);//添加元素
map.get(keyi);// 获取valuei

Java集合框架(Collection)

在这里插入图片描述
在这里插入图片描述

列表Lists

List概念

List是Java集合框架中的一个接口,代表一种动态的、功能丰富的对象容器

List声明和初始化

// List 的声明和初始化 (通常使用实现类 ArrayList)
List<Integer> intList = new ArrayList<>(); // 初始为空

List特点

  • 大小:动态可变。可根据需要自动扩容
  • 元素类型:只存储对象(支持包装类),不能存储基本数据类型
  • 打印输出:直接打印列表对象,输出元素内容[a, b, c]

List实现-支持多态

ArrayList

特点:动态数组,可变大小

List<String> arrayList = new ArrayList<>()
LinkedList
List<Integer> LinkedList = new LinkedList<>()

List方法-功能丰富

size() // List大小
add(elem) // List尾部自动扩容
get(index) //获取指定位置元素
remove(elem) //移除指定元素
remove(index) //移除指定位置元素
contains(elem) //是否包含某元素,返回boolean
indexOf(elem) //获取int索引
subList(start, end)//获取子列表
interator() //获取迭代器

集合Sets

存储不重复的元素

HashSet:

特点: 无序集合,基于HashMap实现。
优点: 高效的查找和插入操作。O(1)

Set<String> hashSet = new HashSet<>();
方法
boolean contains(elem) //判断元素是否存在
add(elem) //添加元素
boolean remove(elem) //删除元素,成功true,失败false
int size() //元素数量
for-each // 增强for循环迭代HashSet
Set<Integer> treeSet = new TreeSet<>();

映射Maps

存储健值对
HashMap:
特点: 基于哈希表实现的键值对存储结构。
优点: 高效的查找、插入和删除操作。

Map<String, Integer> hashMap = new HashMap<>();
Map<String, Integer> treeMap = new TreeMap<>();

Vector

栈 Stack

栈是一种线性数据结构,按照后进先出的顺序操作元素。栈是Vector的一个子类。

Stack<Integer> stack = new Stack<>();
栈定义方法
boolean empty()
Object peek() // 查看堆栈顶部的对象,并作为此函数的值返回该对象
Object pop() // 移除堆栈顶部的对象,并作为此函数的值返回该对象
Object push(Object element) // 把顶压入堆栈顶部
栈 Stack & 堆 Heap
  • 基本类型变量个对象引用在栈中
  • 多有对象实例和数组在堆中
  • 每个线程都有自己的栈内存,所有线程共享堆内存

Java常见报错

1 Project JDK is not defined

Setup SDK > +Add SDK > JDK: Java Path (高级设置 > 环境变量)

2 List item

error: duplicate class: Main
程序只需要一个入口,即只有一个类包含main方法,其他类都是用于被main方法直接或间接调用的。

3 error: non-static method ‘xxx’ cannot be referenced from a static context

描述:在静态上下文中无法引用非静态方法
解决:Make the method static.

4 error: cannot find symbol

描述:无法找到符号

5 找不到或无法加载主类

java.lang.ClassNotFoundException
原因:查看该类是否有被编译成class文件

6 cannot be resolved 无法解析

cannot be resolved a type 无法解析为类型
原因:jar包缺失
解决:import导入对应包

7 MAVEN

Project build error: Non-parseable POM D:\xxx\xxx\pom.xml: expected START_TAG or END_TAG not TEXT (position: xxx)
原因:代码格式(空格)问题
解决:自动格式化 Ctrl+Shift+F

8 未设置系统全局属性 system property

Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set b the webdriver.chrome.driver system property:
解决方案:系统设置Chrome驱动文件的路径
将驱动放置对应目录下,并添加代码
System.setProperty("webdriver.chrome.driver", "xxx");

Exception in thread "main" java.lang.IllegalStateException: The driver executable does not exist

9 无法在静态方法中引入非静态成员

cannot make a static reference to non-static field
原因:在静态方法中,不能直接访问非静态成员(方法/变量)。因为,非静态变量依赖于对象存在,对象必须实例化后,变量才会在内存中存在。
解决方案:1)将变量改为静态的;2)先实例化对象,然后使用对象名.变量名调用

10 不兼容的类型 incompatible types

public Map<Character, Integer> getFrequencyMap(List lst) {
	for (String elem : lst) {
	......
	}
}

java: incompatible types: java.lang.Object cannot be converted to java.lang.String
原因:List默认返回Object
解决方案:
(1)将Object转换为String

String str = String.valueOf(obj);
String str = (String)(obj);

(2)使用String类

import ...

public class NaiveLetterFreqGuesser implements Guesser { // Java代码须在class类中

	private final List<String> words; // 声明属性words,是一个String组成的List
	public NaiveLetterFreqGuesser(String dictionaryFile) { words = FileUtils.readWords(dictionaryFile); } // 变量words读取文件
	
	public Map<Character, Integer> getFrequencyMap() { // 构造方法
		for (String elem : words) { // 使用全局属性words
		......
		}
	}
	
	public static void main(String[] args) { // run main 以执行代码
		NaiveLetterFreqGuesser nlfg = NaiveLetterFreqGuesser(dictionary: "data/example.txt") // 定义类
		System.out.println("list of words: " + nlfg.words); // 调用类的属性words
		System.out.println("frequency map: " + nlfg.getFrequencyMap()); // 调用方法
	}
}

11 类1不能强制转换为类2

class java.lang.Character cannot be cast to class java.lang.Integer

12 并发修改异常

for (int i = 0; i < guesses.size(); i ++) {
                if (!(pattern.indexOf(guesses.get(i)) != -1)) {
                    for (String elem: lst) {
                        if (elem.indexOf(guesses.get(i)) != -1) {
                            lst.remove(elem);
                        }
                    }
                }
            }

报错:ConcurrentModificationException
分析:迭代的时候不允许迭代体的长度发生变化

13 java: 错误: 不支持发行版本 20

问题:设置的项目SDK与本地下载的java版本不符
解决:“File -> Project Structure”


网站公告

今日签到

点亮在社区的每一天
去签到