java集合笔记二 —— List集合(概念方法,list集合去重,模拟栈结构(1)

}

}

import java.util.Arrays;

import java.util.List;

public class test2 {

public static void main(String[] args) {

//数组与List集合链接起来,更新任何一个,另一个都会随之改变

String[] s = {“a”,“b”,“c”,“d”};

List list = Arrays.asList(s);

System.out.println(list.toString());

System.out.println(“==============”);

//更改List集合

list.set(0,“e”);

//分别打印list集合和数组s

System.out.println(list.toString());

System.out.println(Arrays.toString(s));

System.out.println(“==============”);

//更改数组

s[1] = “f”;

//分别打印list集合和数组s

System.out.println(list.toString());

System.out.println(Arrays.toString(s));

}

}

结果为

在这里插入图片描述

遍历List集合

package review.ListDemo1;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

public class test3 {

public static void main(String[] args) {

List list = new ArrayList();

list.add(“aaa”);

list.add(“bbb”);

list.add(“ccc”);

//遍历List集合

// 方式一、增强for循环

for(String ss : list){

System.out.println(ss);

}

//方式二、get方法与size方法相结合

for(int i=0;i<list.size();i++){

System.out.println(list.get(i));

}

//方式三、iterator迭代器遍历

Iterator it = list.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

}

}

LinkedList类概述

底层数据结构是链表,查询慢,增删快

线程不安全,效率高

LinkedList的特有功能:

  1. 添加功能:

public void addFirst(Object obj):在该集合开头插入指定的元素

public void addLast(Object obj)将指定的元素追加到此列表的末尾。// 这个方法相当于add(Object) 。

  1. 获取功能:

public Object getFirst():返回此集合中的第一个元素。

getLast():返回此列表中的最后一个元素。

  1. 删除功能:

public Object removeFirst():移除集合中第一个元素

public Object removeLast():移除集合中最后一个元素

import java.util.LinkedList;

public class demo10 {

public static void main(String[] args) {

LinkedList linkedList = new LinkedList();

//add()添加元素

linkedList.add(“hadoop”);

linkedList.add(“hive”);

linkedList.add(“flink”);

System.out.println(linkedList.toString()); //[hadoop, hive, flink]

//addFirst(Object obj) 在该集合开头插入指定的元素

linkedList.addFirst(“apple”);

System.out.println(linkedList.toString()); //[apple, hadoop, hive, flink]

//addLast(Object obj)将指定的元素追加到此列表的末尾

linkedList.addLast(“pear”);

System.out.println(linkedList.toString()); //[apple, hadoop, hive, flink, pear]

//getFirst() 返回此集合中的第一个元素

System.out.println(linkedList.getFirst()); //apple

//getLast() 返回此列表中的最后一个元素

System.out.println(linkedList.getLast()); //pear

//removeFirst() 移除集合中第一个元素,返回被删除的元素

System.out.println(linkedList.removeFirst()); //apple

System.out.println(linkedList.toString()); //[hadoop, hive, flink, pear]

//removeLast() 移除集合中最后一个元素,返回被删除的元素

System.out.println(linkedList.removeLast()); //pear

System.out.println(linkedList.toString()); //[hadoop, hive, flink]

}

}

list的相关操作

list集合去重
方式一、利用一个新集合去重

package review.ListDemo1;

import java.util.ArrayList;

import java.util.List;

public class demo7 {

public static void main(String[] args) {

List list1 = new ArrayList();

list1.add(“hadoop”);

list1.add(“hive”);

list1.add(“spark”);

list1.add(“hadoop”);

list1.add(“hadoop”);

List list2 = new ArrayList();

for(int i=0;i< list1.size();i++){

if(!list2.contains(list1.get(i))){

list2.add(list1.get(i));

}

}

System.out.println(list2.toString());

}

}

在这里插入图片描述

这里的思路是写一个新的list2集合,然后for循环遍历list1,如果list2中没有包含list1的这个元素list1.get(i),则将这个元素加入到list1中。如果list2集合中包含这个元素,则不加入。

方式二、在原集合上操作

package review.ListDemo1;

import java.util.Objects;

public class Student {

private String name;

private int age;

public Student() {

}

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “Student{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

public void printD(){

System.out.println(“test”);

}

public String toStringTest(){

return “Student{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Student student = (Student) o;

return age == student.age &&

Objects.equals(name, student.name);

}

}

package review.ListDemo1;

import java.util.ArrayList;

import java.util.List;

public class demo9 {

public static void main(String[] args) {

List list1 = new ArrayList();

list1.add(“hadoop”);

list1.add(“hive”);

list1.add(“spark”);

list1.add(“hadoop”);

list1.add(“hadoop”);

System.out.println(list1.toString());

for(int i=0;i<list1.size();i++){

for(int j=i+1;j<list1.size();j++){

if(list1.get(i).equals(list1.get(j))){

list1.remove(j);

j–;

}

}

}

System.out.println(list1.toString());

}

}

在这里插入图片描述

这里的思路是不创建一个新的list集合,就单纯的通过list集合本身的双重for循环遍历。将集合中的每一个对象与后面的其余对象进行对比,如果重复则删去。

第一重for循环是选择一个对象。第二重for循环将此对象与后面剩余的集合元素进行对比。

如果两个对象里面的属性值都相同,则删去后面重复的对象。

这里需要注意的是,要在Student类中重写equals方法,否则equals方法默认的是比较地址值,重写后改为对比属性值。

还有一点需要注意,这里删去元素后需要 j - -

因为假如删去list集合中序号为3的元素,则原先序号为4的元素就会向前补位,变成序号3

因此,如果没有 j - - 语句,就会导致跳过一个元素没有检测是否重复。

用LinkedList 模拟栈结构

import java.util.LinkedList;

public class MyStack {

LinkedList linkedList;

public MyStack(){

linkedList = new LinkedList();

}

public void addStack(Object o){

linkedList.addFirst(o);

}

public Object getStack(){

return linkedList.removeFirst();

}

public boolean StackEmpty(){

return linkedList.isEmpty();

}

}

package review.ListDemo1;

public class demo11 {

public static void main(String[] args) {

MyStack myStack = new MyStack();

myStack.addStack(“hadoop”);

myStack.addStack(“hive”);

myStack.addStack(“java”);

System.out.println(myStack.getStack());

System.out.println(myStack.getStack());

System.out.println(myStack.getStack());

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

System.out.println(myStack.getStack());

System.out.println(myStack.getStack());

最后,附一张自己面试前准备的脑图:

[外链图片转存中…(img-HBsl3LAI-1714396352641)]

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

[外链图片转存中…(img-2bu795Jc-1714396352642)]

  • Spring全家桶(实战系列)

[外链图片转存中…(img-B3EsqVra-1714396352643)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-wu3k8nvg-1714396352644)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值