集合(2)

## Vector

Vector特点:

– 底层数据结构是数组,内存连续
– 查询速度快
– 增删速度慢
– 线程安全的集合
– 默认初始容量为10
– 默认扩容是翻倍,如果指定了容量增量,那么扩容 = 已有容量 + 指定增量

已经被ArrayList取代

## Iterator迭代器

– Java迭代器Iterator是Java集合框架中的一种机制,用于遍历集合(例如列表,集合和映射等)的接口
– Collection中的Iterator的方法是从Iterable接口中继承的
– Collection接口是Iterable接口的子接口,因此所有的集合都可以使用迭代器
– 实现这个接口的类产生的对象可以被增强for循环遍历,增强for循环本质上就是再进行迭代遍历

## List接口的sort方法

“`java
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(new Person(“张三丰”, 100));
list.add(new Person(“张翠山”, 60));
list.add(new Person(“张无忌”, 99));
list.add(new Person(“谢逊”, 80));
list.add(new Person(“周颠”, 30));

//方法一
list.sort(new Comparator() {
@Override
public int compare(Person o1, Person o2) {
return o1.getSore() – o2.getScore();
}
});

//lambda表达式
list.sort(((o1, o2) -> o1.getScore() – o2.getScore()));
list.forEach(System.out::println);

}

private static void demo() {
List list = new ArrayList<>();
list.add(“abc”);
list.add(“rtyt”);
list.add(“ghjng”);
list.add(“ki”);
list.add(“ert”);
list.add(“vcbvc”);
list.add(“qrty”);
// 按照字符串的首字符进行排序
// 匿名内部类
list.sort(new Comparator() {
// 返回值如果是负值,那么参数o1排在o2前面
// 返回值如果是正值,那么参数o1排在o2后面
@Override
public int compare(String o1, String o2) {
return o1.charAt(0) – o2.charAt(0);
}
});
System.out.println(list);
}
“`

## Stack实现类

Stack实现类是Vector的子类,栈结构,后进先出(Last In First Out)

– 入栈:从栈顶到栈底
– 出栈:从栈底到栈顶

“`java
public static void main(String[] args) {
Stack stack = new Stack<>();
// 压栈
stack.add("杨过");
stack.add("小龙女");
stack.add("雕兄");
stack.add("周伯通");
System.out.println(stack);
// 先进后出
// 弹栈
// String pop = stack.pop();
// System.out.println(pop);
// 查看栈顶元素
String peek = stack.peek();
System.out.println(peek);
// 入栈
stack.push("欧阳锋");
// 判断是否为空
System.out.println(stack.empty());
// 从栈顶向栈底搜索,从1开始
int index = stack.search("小龙女");
System.out.println(index);
System.out.println(stack);
}
“`

## 实现Stack

“`java
package cn.javasm.demo;

import java.util.Arrays;
import java.util.EmptyStackException;
import java.util.Objects;

public class StackDemo{

// 栈底层存放的数据类型是数组
private String[] data = new String[10];

// 栈的实际大小
private int size;

/**
* 判断是否为空
*/
public boolean empty(){
return size == 0;
}

/**
* 返回栈顶元素
*/
public String peek(){
if (size == 0) throw new EmptyStackException();
return data[size – 1];
}

/**
* 返回和删除栈顶元素
*/
public String pop(){
// 获取栈顶元素
String peek = peek();
size–;
return peek;
}

/**
* 压栈
*/
public void push(String str){
if (size >= data.length){
data = Arrays.copyOf(data,data.length * 2);
}
data[size++] = str;
}

/**
* 从栈顶向栈底搜索元素,从1开始
*/
public int search(String str){

// 方式一
// for (int i = size – 1,j = 1; i >=0; i–,j++){
// // 判断字符串是否相同
// if (Objects.equals(data[i],str)){
// return j;
// }
// }
// 方式二
for (int i = size – 1;i >= 0; i–){
if (Objects.equals(data[i],str)){
return size – i;
}
}

return -1;
}

}

}

“`

## Set接口

Set接口不包含重复的元素

### HashSet类

– HashSet的底层存储结构是HashMap,HashMap底层是数组+链表+红黑树的结构
– HashSet不允许重复的元素,元素的位置可能发生改变,是无序的,线程不安全

![image-20241021153352182](http://43.155.216.63:21080/wp-content/uploads/2025/12/image-20241021153352182.png

### LinkedHashSet

– 有序的集合
– 底层数据结构是哈希表和双向链表
– 线程不安全的集合,运行速度快

“`java
import java.util.ArrayList;
import java.util.LinkedHashSet;

public static void main(String[] args) {
Set set = new LinkedHashSet<>();
set.add(“小陈”);
set.add(“小王”);
set.add(“超人”);
set.add(“稻草人”);
set.add(“谜语人”);
set.add(“稻草人”);
System.out.println(set);
}
“`

### TreeSet

实例代码:

定义Person类

“`java
package cn.javasm.demo;

/**
* @author gfs
* @version 0.1
* @className Person
* @descriptioin:
* @date 2024/10/21 11:38
* @since jdk11
*/
public class Person implements Comparable {
// 返回值如果是正值,当前对象放在传入对象的后面
// 返回值如果是负值,当前对象放在传入对象的前面
@Override
public int compareTo(Person o) {
return this.score – o.score;
}

private String name;

private int score;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

public Person(String name, int score) {
this.name = name;
this.score = score;
}

@Override
public String toString() {
return “Person{” +
“name='” + name + ‘\” +
“, score=” + score +
‘}’;
}

}

“`

“`java
package cn.javasm.demo;

import java.util.TreeSet;

/**
* @author gfs
* @version 0.1
* @className TestDemo7
* @descriptioin:
* @date 2024/10/21 16:07
* @since jdk11
*/
public class TestDemo7 {
public static void main(String[] args) {
// 可以排序的集合 不能重复 有序
// 放入TreeSet中的对象的类,需要实现Comparable
TreeSet treeSet = new TreeSet<>();
treeSet.add(new Person(“狗杂种”, 10000));
treeSet.add(new Person(“乔峰”, 100));
treeSet.add(new Person(“天山童姥”, 99));
treeSet.add(new Person(“虚竹”, 98));
treeSet.add(new Person(“段誉”, 101));
System.out.println(treeSet);
}

private static void demo() {
TreeSet set = new TreeSet<>();
set.add(“e”);
set.add(“d”);
set.add(“a”);
set.add(“c”);
set.add(“f”);
System.out.println(set);
}
}
“`

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇