当前位置:网站首页 > Java基础 > 正文

java基础做胎教



1.内部类(局部和匿名)

书写位置:在成员方法的位置中书写的类即使局部内部类。

局部内部类可以访问外部类的成员变量,包括私有成员。

在外部类访问局部位置,访问内部类的成员方法,则需要在外部类中创建内部类对象,进而对内部类对象来访问。

 
面试题

局部内部类访问局部变量的时候,此时局部变量应该注意什么?(JDK7/JDK8),为什么要加入final关键字呢?

此时Java环境是Jdk7,局部内部类访问局部变量时,此时该变量必须显示加入final修饰

目前环境是JDK8环境,做了什么优化?

通过反编译查看。没有反编译工具的无需担心,看下面代码,理解即可。

 
原因:

局部变量的生命周期是随着方法调用而存在,随着方法调用结束而消失,而当前外部类对象调用method 方法的时候,此时num进入栈内存,在局部位置创建了局部内部类对象。而局部内部类对象调用它的成员方法访问该变量,方法method方法结束之后,内部类对象不会立即消失, 它里面的成员方法在访问局部变量,局部变量必须变成常量,常驻内存,否则如果当前变量消失了,局部内部类的成员依然在访问就会出现冲突! 所以 jdk7 收到必须加入final修饰,jdk8通过jvm已经做了优化了,无需手动加入final修饰。

匿名内部类

简而言之,即没有名字的内部类,一般在局部位置使用。它是内部类的一种简化格式。

格式:new 类名(抽象/具体类/接口) (){

重写功能;

};

本质:继承了该类或者实现了该接口的子类对象

 
应用场景
1.方法的形式参数如果是一个接口,实际需要传递的接口子实现类对象

方式1:将接口的子实现类定义出来

方式2:使用接口的匿名内部类(可以降低数据间的耦合性)

example1
 
example2
 
2.方法的返回值是接口类型,需要返回的当前接口的子实现类对象
example1
 
example2
 
看程序写结果

要求:需要在控制台分别打印30,20,10

 
考点:
  • 外部类直接访问非静态的成员内部类的格式
  • 外部类的成员变量的方法方式,(在成员内部类的成员方法中)
  • 成员变量,局部变量名称都一样(就近原则)
  • 外部类和内部类没有继承关系

2.常用类(Object)

1.Object

java.lang.Object:是类结构层次的根类(超类—>父类),所有的类都默认继承自Object子类(派生类)

通过jdk提供的API文档学习常用类(其余类也一样)

API:Application Programming Interface:应用程序接口开发文档

1)getClass()方法(public final Class getClass())

获取正在运行的类(就是字节码文件对象),在getClass()方法后可以继续跟getName()获取当前类的 全限定名称(包名.类名)。public String getName():返回一个字符串。

2)hashCode()方法(public int hashCode())

获取对象的一个哈希码值 (本质不是地址值,可以把它理解为地址值)----跟哈希表有关系(HashMap)

一般情况:不同的对象获取的哈希码值是不同的 ,(但是中文字符,可能内容不一样,但是哈希码值不同!)

底层是通过哈希表算出来的,目前先了解!

底层代码中的native关键字:本地方法,指非java语言底层实现。c/c++。

 
面试题: 获取一个类的字节码文件对象有几种方式?

三种:

第一种:通过Object类的getClass()—>Class :正在运行的java类: class 包名.类名

第二种:任意Java类型的class属性----获取当前类的字节码文件对象Class

第三种方式:Class里面forName(“类的全限定名称(包名.类名)”) ; (使用最多)

3)toString()方法 (public String toString())

返回对象的字符串表示形式。结果应该是一个简明扼要的表达,容易让人阅读。

建议所有子类覆盖此方法。

描述一个对象:是由很多属性(成员变量组成),应该看到的具体的属性描述

也可以直接快捷键----重写toString即可(大部分的常用类或者后面的集合都会重写Object类的toString())

 
4)equals()方法(public boolean equals(Object obj))

判断当前obj对象是否和当前对象相等

面试题:equals和==的区别?

==: 连接的基本数据类型:比较的是数据值否相同

==: 连接的是引用类型,比较的是地址值是否相同

equals方法:如果使用Object默认的:底层用==,默认比较的还是两个对象的地址值是否相同

例:Student s1 = new Student(“文章”,35) ;

Student s2 = new Student(“文章”,35) ;

s1和s2虽然地址值不同,他们的成员的内容相同,认为他是同一个人,但是如何让s1.equals(s2)为true:针对equals来说比较的是成员信息内容是否相同;

String重写Object的equals方法同时还需要重写hashCode

内容相同,还需要比较哈希码值相同

alt+ins—>hashcode+equals方法

重写之后,就比较的是成员信息的内容是否相同!

 
5)clone()方法(克隆)(protected Object clone() throws CloneNotSupportedException:创建对象并返回该对象的副本)

这个方法会抛出一个异常,throws:表示的是可能出现异常,针对调用者必须进行处理

要使用clone方法,当前进行克隆的对象所在的类必须实现"标记接口"Cloneable,在实现这个接口之后就可以使用Object的clone()方法了。

标记接口指的是既没有字段(成员变量),也没有成员方法

clone()克隆指的是浅克隆,浅克隆就是将被克隆的对象的地址值赋值给接受地址。作用与传统方式无异。

 

3.Scanner类提供的判断功能

Scanner类:文本扫描器

使用前需要导入包:java.util.Scaner ;

Scanner的构造方法:public Scanner(InputStream source):创建一个文本扫描器

形式参数是一个抽象类,它通过System类里面的public static final InputStream in成员

System类里面的public static final InputStream in = null;

本地方法(非Java语言实现)—> private static native void setIn0(InputStream in);

native表示本地的:表明底层方法一定会创建系统资源来读取用户输入的 字符(整数,字 符串…)(非java语言实现,不用纠结)

Scanner提供判断功能是为了防止输入的类型和结果不匹配。

public boolean hasNextXXX():判断下一个录入的是否为指定的XXX类型

XXX nextXXX() 获取功能

如: public boolean hasNextInt()用于判断输入是否为整型

int nextInt()

在我们输入接受字符串时出现一个问题:如果先录入int,在录入String用户(nextLine()接收)。 录入的字符串数据就会被漏掉。

解决方案:

1)直接使用next()---->String

2)在使用nextLine()之前,在创建Scanner对象即可

 

4.常用类(String)

字符串是一个常量,一旦被赋值了,其值(地址值)不能被更改

推荐的使用方式: String 变量名 = “xxxx” ;//xxxx代表 的当前String的实例

因为String 变量名 = new String()会在堆内存中开辟空间,然后检索字符串常量池,造成了空间浪费。而静态定义直接检索常量池即可,不存在则创建。二者作用相同,所以用静态即可!!!

String的构造方法:

  • public String():空参构造:空字符序列
  • public String(byte[] bytes):将一个字节数组构造成一个字符串,使用平台默认的字符集(utf-8:一个中文对应三个字节) 解码
  • 编码和解码—保证字符集统一
  • 编码:将一个能看懂的字符串---->字节 “今天老地方见” utf-8
  • 解码:将看不懂的字节---->字符串 “今天老地方见” gbk
  • public String(byte[] bytes,字符集):使用指定的字符集,将字节数组构造成一个字符串
  • public String(byte[] bytes,int offset,int length):将指定的部分字节数组转换成字符串
  • 参数1:字节数组对象,参数2:指定的角标值 参数3:指定长度
  • public String(char[] value):将字符数组构造成一字符串
  • public String(char[] value,int offset,int count):将部分字符数组转换成字符串
  • public String(String original):构造一个字符串,参数为字符串常量
 

1.常用功能

1.1 int length():获取字符串长度。

面试题:在数组中有没有length方法,在String类中有没有length方法,在集合中有没有length方法?

数组中没有length方法,length属性;String类中有length(); 集合中没有length(),通过size()获取元素数

面试题:String s1 = “hello” ;String s2 = new String(“hello”) ;在内存中分别创建了几个对象?

第一个创建了一个对象,直接在常量池创建,开辟常量池空间。

第二个:创建了两个对象,一个堆内存中开辟空间,一个指向常量池(不推荐)

1.2 == 和equals:

==:连接基本数据类型,比较的是值;连接引用类型比较的是地址

equals():比较两个字符串的内容(默认比较地址值,String对equals进行了重写)

1.3常用的转换功能(重点)

byte[] getBytes() :将字符串转换成字节数组 (编码)。字符串—>看不懂的字节数

如果方法为空参,使用平台默认的编码集进行编码(utf-8:一个中文对应三个字节)

byte[] getBytes(String charset):使用指定的字符集进行编码

解码的过程:将看不懂的字节数----->String

String(byte[] bytes):使用默认字符集进行解码

String(byte[] bytes,指定字符集)

编码和解码必须要保证字符集统一,否则将产生错误,解码后既然看不懂

字符集:

  • gbk :一个中文两个字节(中国中文编码表)
  • gb2312:gbk升级版(含义有一个中文字符:中国的中文编码表)
  • iso-8859-1:拉丁文码表
  • utf-8:任何的浏览器—>都支持 utf-8格式 (后期统一个)
  • unicode:国际编码表
  • JS:日本国际 电脑系统 一个字符集
    1.4 public static String toString(int/byte/float/double…[] a):将任意类型的数组---->String
    1.5 public char[] toCharArray():将字符串转换成字符数组
    1.6 public String toString():返回自己本身—"当前字符串的内容"
    1.7 public String toUpperCase():将字符串转换成大写
    1.8 public String toLowerCase():将字符串转换成小写
    1.9 public boolean equals(Object anObject):比较两个字符的内容是否相同 (区分大小写)
    1.10 public boolean equalsIgnoreCase(String anotherString):比较两个字符串是否相同(不区分大小写)
    1.11 public boolean startsWith(String prefix):判断字符串是否以指定的内容开头
    1.12 public boolean endsWith(String suffix):判断字符串是否以指定的内容结尾
    1.13 boolean isEmpty() 判断字符串是否为空 :若为空,则返回true;否则返回false
    String s = “” ;// 空字符串 ,存在String对象 ""
    String s = null ; 空值 (空对象) null:引用类型的默认值
    1.14 public char charAt(int index) 返回字符串中的第index个字符
    1.15 public String concat(String str):将指定的字符串和当前字符串进行拼接,获取一个新的字符串
    1.16 public String[] split(String regex):拆分功能:通过指定的格式将字符串—拆分字符串数组
    1.17 public String substring(int beginIndex) :从指定位置开始默认截取到末尾(角标从0开始)
    1.18 public String substring(int beginIndex,int endIndex):从指定位置开始,截取到位置结束(左闭右开区间,也就是包左不包右)
    1.19 public static String valueOf(boolean/int/long/float/double/char…Object b)
    万能方法,将任意类型转换String类型
    1.20 public String replace(char target,char replacement):替换功能 将指定的内容使用target字符进行替换
    1.21 public String replaceAll(String regex, String replacement) : 将指定的和参数1正则表达式匹配的字符串 使用replacement进行替换
    1.22 public String trim():去除字符串两端的空格
    1.23 (重点)public int compareTo(String anotherString):按照字典顺序比较,返回值是int。
    比较规则是先比较字符串对应位置的字符,如果字符相等,则长度相减。
 
 

2.StringBuffer

StringBuffer:字符串缓冲区 ,类似于String。但是不一样 (它可变的字符序列)

且StringBuffer是线程安全的(同步),执行效率低即多线程时不能同时访问资源。

StringBuilder : 和StringBuffer具有相互兼容的API,它是线程不安全的类(不同步),执行效率高。单线程时都采用StringBuilder,因为不存在资源抢占,表现在不会有另一个线程同时访问一个变量,造成计算或事件结果与事实不符。它此时也是线程安全的。

2.1StringBuffer的构造方法

2.1.1 public StringBuffer() :空参构造,创建一个空字符序列的字符串缓冲区 (推荐)

2.1.2 public StringBuffer(int capacity):构造一个字符串缓冲区对象,指定容量大小

2.1.3 public StringBuffer(String str):指定字符序列,长度加上初始容量16(总容量)

 
2.2 StringBuffer的获取功能

2.2.1 public int length():获取字符数(长度)

2.2.2 public int capacity():获取字符串缓冲区容量

2.3 StringBuffer的添加功能

2.3.1 StringBuffer append(任何类型) :将内容追加到字符串缓冲区中 (在字符串缓冲区的最后一个字符序列的末尾追加)

2.3.2 public StringBuffer insert(int offset,String str):插入:在指定位置处插入指定的内容

2.4 StringBuffer的删除功能

2.4.1 public StringBuffer deleteCharAt(int index):删除指定索引处的缓冲区的字符序列,返回字符串缓冲区本身

2.4.2 public StringBuffer delete(int start,int end):删除从指定位置到指定位置结束的字符序列(包含end-1处的字符),返回字符串缓冲区本身

2.5 StringBuffer的截取功能

2.5.1 public String substring(int start):从指定位置开始,默认截取到末尾,返回值是新的字符串

2.5.2 public String substring(int start,int end):从指定位置开始到指定end-1结束进行截取,返回的新的字符串

2.6 StringBuffer的替换功能

public StringBuffer replace(int start(起始索引),int end结束索引(end-1), String str(替换的内容) )

java基础做胎教
 
2.7 StringBuffer的特有功能

public StringBuffer reverse(),反转之后,返回的是字符串缓冲区本身

 

3 类型的相互转换

String---->StringBuffer

StringBuffer---->String

简而言之就是通过各自的有参构造方法进行转换

 

4 面试题

4.1StringBuffer和数组的区别?

数组:只能存储同一种数据类型容器,数组可以存储基本类型,也可以存储引用类型。

数组的最大特点:长度固定。

StringBuffer:支持可变的字符序列,里面存储可以存储任意类型的元素。

append(int/char/double/float/Obejct/String)

isnert(int offert,int/char/double/float/Obejct/String)

一般情况:开发中 将StringBuffer----->String

4.2集合/数组的区别?

集合在为指定泛型的时候可以存储不同数据类型,但都是引用数据类型,底层用数组或链表完成功能。且长度可变。

数组只能存储一种数据类型,且长度不可变。

4.3 StringBuffer,StringBuilder和String的区别?

String:字符串是一个常量,一旦被赋值,其值不能更改/作为形式参数属于特殊的引用类型,形式参数的改变不会实际参数.

StringBuffer:可变的字符序列,线程安全的类----同步的----->执行效率低(线程角度)

StringBuilder:可变的字符序列.和StringBuffer具有相互兼容的api,单线程程序中(只考虑执行效率,不考虑安全问题)。

5.常用类(包装类(Integer、character…)

包装类是针对基本数据类型而言的,四类八种基本类型都有自己对应的引用类型。

其作用最主要体现在基本数据类型和String类型之间转换作为“中间桥梁”。

整数类型 引用类型(默认值都是null)

byte Byte

short Short

int Integer

long Long

浮点类型

float Float

double Double

字符类型

char Character

布尔类型

boolean Boolean

4.1 基本功能(以Integer为例)

4.1.1 public static String toBinaryString(int i):将整数---->二进制 的字符串

4.1.2 public static String toOctalString(int i):将整数---->八进制的字符串

4.1.3 public static String toHexString(int i):将整数---->十六进制数据

4.1.4 public static final int MAX_VALUE:int的最大值

4.1.5 public static final int MIN_VALUE:int的最小值

 

4.1.6 构造方法

Integer(int value):可以将int类型保证为Integer类型

Integer(String s) throws NumberForamtException: 抛出一个数字格式化异常

注意事项:当前字符串如果不是能够解析的整数的,就会出现数字格式化异常,s必须为 数字字符串

 
4.2 JDK5 以后的新特性

自动拆装箱,可变参数,静态导入,增强for循环,<泛型>,枚举。

4.2.1自动拆装箱

简而言之,基本类型转换为对应的包装类类型 (装箱)。对应的包装类型转换为基本类型(拆箱)。

 

关于Integer的静态方法valueOf(),当int值在-128-127之间的时候,将其进行装箱时不会进行重新new空间对象,这部分的空间对象系统已经给出,会自动给Integer变量直接赋值。

也就是说,Integer i1 = new Integer(100);

Integer i2 = new Integer(100); 此时i1与i2的地址值是相同的。

4.2.2 静态导入(方法级别)

Math类的功能都是静态的,就可以使用静态导入

import static 包名.类名.方法名; 但是前提是不能和其他方法同名

如:import static java.lang.Math.abs ;

import static java.lang.Math.random;

此时直接用方法名使用即可

4.2.3 增强for循环

增强for循环和for循环没有关系!

增强for循环底层仍然是借助迭代器来实现的

格式 for (数据类型 变量名:集合 ){

循环题;//后面集合遍历有使用

}

4.2.4 泛型

泛型的格式 : <引用数据类型>,在进行集合创建的时候,声明其引用类型,则当前集合当中便只能存储当前声明的类型数据。

集合类型<引用数据类型> 集合对象名 = new 子实现类<引用数据类型>() ;

泛型的好处:

1)将运行时期异常提前了编译时期

2)避免了强制类型转换

3)提高了程序安全性

4.2.5 枚举

简而言之,就是存储一系列常量的类似于类的结构

格式 enum {

元素1 ;元素2;元素3;…

}

4.3 int与String之间的相互转化

int转换为String:

方式1:直接使用字符串拼接 String = String + int;

方式2:Integer的静态功能 public static String toString(int i);

String s = Integer.toString(i);

方式3:int---->Integer---->public String toString(),此时可以看出来底层也是用的toString静态方法

String转换为int:

方式1:public static int parseInt(String s)throws NumberFormatException:数字字符串 (使用最多) int result = Integer.parseInt(s);

方式2:String ---->Integer---->int。也就是先Integer的构造方法 Integer(String s)生成对象 Integer integer = new Integer(s) ;然后用对象的成员方法intValue() int result2 = integer.intValue()。

 
4.4 Character

char类型的包装类类型

构造方法:public Character(char value)

主要功能:

public static boolean isUpperCase(char ch):判断当前字符是否大写字母字符

public static boolean isLowerCAse(char ch):是否为小写字母字符

public static boolean isDigit(char ch):是否为数字字符

public static char toLowerCase(char ch):将字符转换成小写

public static char toUpperCase(char ch):将字符转换成大写

 

6. 日期类(Data、Calender)

6.1Calender

Calender:日历类(java.util.Calender)。提供了一些诸如年月日中的日期等字段

静态功能:public static Calendar getInstance(),获取系统的当前时间。

成员方法: public int get(int field):根据给定日历字段----获取日历字段的值(系统的日历)

public abstract void add(int field,int amount):给指定的日历字段,添加或者减去时间偏移量 参数1:日历字段 参数2:偏移量

 
6.2 Date

java.util.date:表示特定瞬间,精确到毫秒。

此类允许格式化和解释字符串。

构造方法:public Date():当前系统时间格式

public Date(long date):参数为 时间毫秒值---->Date对象 (1970年1月1日…)

 

java.util.Date获得的时间值转化为String,我们称为格式化过程。

DateForamt:抽象类----提供具体的日期/格式化的子类:SimpleDateFormat

format(Date对象)—>String

SimpleDateFormat:构造函数

public SimpleDateFormat():使用默认模式

public SimpleDateFormat(String pattern):使用指定的模式进行解析或者格式 (推荐)

参数,此部分必须一模一样

表示年 “yyyy”

表示月 “MM”

表示月中的日期 “dd”

一天中小时数 “HH”

分钟数 “mm”

秒数 “ss”

String(日期文本)转换为Date 我们称为解析过程

public Date parse(String source)throws ParseException

如果解析的字符串的格式和 public SimpleDateFormat(String pattern)的参数模式不匹配的话,就会出现解析异常!

 

7. Bigdecimal(针对浮点类型的精确计算))

Java提供的类: BigDecimal,在小数要进行精确计算的时候,还可以计算的同时保留小数点

后的有效位数

构造方法:

public BigDecimal(String value):数字字符串

成员方法:

public BigDecimal add(BigDecimal augend)加

public BigDecimal subtract(BigDecimal subtrahend)减

public BigDecimal multiply(BigDecimal multiplicand)乘

public BigDecimal divide(BigDecimal divisor):除(需得整除)

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

参数1:除数 参数2:小数点后保留的有效位数 参数3:舍入模式 :四舍五入

 

8.Math类

java.lang.Math :针对数学运算的工具类,提供了很多方法

 
 
 
 
 
 
 
 
 

一般工具类当中的构造方法都是私有的,直接对外提供静态方法,不让进行实例化!

 

9.Random类

java.util.Random类:伪随机数生成器

构造方法

public Random(): 产生一个随机生成器对象,通过成员方法随机数每次没不一样的(推荐)

public Random(long seed) :参数为long类型的值(随机数流:种子),每次通过成员方法获取随机数产生的随机数相同的

获取随机数的成员方法

public int nextInt():获取的值的范围是int类型的取值范围(-2的31次方到2的31次方-1)

public int nextInt(int n):获取的0-n之间的数据 (不包含n)

产生随机数的方法:

Math类的random方法 public static double random();

Random类:也能够去使用 无参构造方法 + 成员方法

public Random():+ public int nextInt(int n)

 

10.关于数组对象

数组对象见明知意就是存储数组的对象

例:使用数组存储5个学生(姓名,年龄,性别),然后将数组进行遍历,获取出来每一个学生的信息!

Student类

 

Test类

 

11.集合

Collection:集合层次的根接口,一些集合允许元素重复(List),一些集合不允许元素重复(Set)

一些集合有序(存储和取出一致)(List),一些集合无序(存储和取出不一致)(Set)

JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List

Collection

List

最具体的子实现类ArrayList,LinkedList,Vector

Set

最具体的实现类TreeSet,HashSet

11.1 基本功能:

添加 boolean add(Object e):添加元素 E(Element)

删除 void clear() 暴力删除(将集合的素有元素全部干掉)

boolean remove(Object o):从集合中删除指定的元素

获取集合的元素数 :int size()

判断功能:boolean isEmpty():判断集合是否为空,为空元素,则返回true

boolean contains(Object o):判断集合中是否包含指定元素,包含则返回true

 
11.2 Collection的高级功能

boolean addAll(Collection c):添加一个集合中的所有元素

boolean containsAll(Collection c):包含一个集合中的所有元素

boolean removeAll(Collection c):删除集合中的所有元素, (删除一个就算删除,返回True)

boolean retainAll(Collection c):A集合对B集合求交集, boolean的返回值是什么意思,交集的元素是保存在A中还是B中 将交集加入到A集合当中,若发生变换为True,否则为False

Student类同10 对象数组

 
11.3 迭代器

Collection的迭代器:集合的专有遍历方式

Iterator iterator():返回值类型接口类型,需要返回的子实现类对象

Iterator接口:

boolean hasNext():判断迭代器中是否存在下一个元素

Object next(): 获取下一个可以遍历的元素

 
11.4List集合三个子实现类的特点

ArrayList
底层数据结构是数组,查询快,增删慢
通过arr[索引值]:查询到某个元素

线程角度: 线程不安全的类,实现不同步的 ----->执行效率高

特点:扩容机制:1.5倍的方式扩容

在33这个元素后面新的元素,需要新建数组,长度是以前数组长度+1

判断加入的元素是否33元素

 

33,继续存储

33以后的,加入88元素(给33以后的元素后面插入新的元素)

public ArrayList():无参构造方法:默认容量是10

 

Vector

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

线程角度:线程安全的类----同步的方法---->执行效率低

单线程程序中.考虑集合默认都会使用 ArrayList,多线程环境集合---->Vector集合

LinkedList

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

线程角度:线程不安全的类---->不同步---->执行效率高

特有功能:

addFirst()

removeFirst()

getFirst()

xxxLast()

应用场景:模拟栈结构特点:先进后出

如果没有明确要求使用什么(List)集合的时候 ,默认都是用ArrayList

11.5List集合

List接口继承Collection,List集合特点: 有序(存储元素和取出元素一致) 允许元素重复

具备Collection相关的功能 Object [] toArray() Iterator iterator()

特有功能:

void add(int index,Object element):在指定的索引处插 入元素

Object get(int index):获取指定位置处的元素 + int size():一种新的集合遍历方式

Object remove(int index):删除指定位置处的元素

Object set(int index,E element):修改指定位置处的元素(替换)

ListIterator listIterator():列表迭代器

ListIterator接口:void add(E e)有添加 remove():有删除

 
11.5.1 java.util.ConcurrentModificationException:并发修改异常

集合在使用迭代器会经常出现的问题:并发修改异常, 当集合的元素正在被迭代器进行遍历,那么集合对象是不能够对元素进行增加或者删除 (一个线程正在遍历,一个线程在修改元素)

解决方案:

1)要么就是迭代器去遍历集合的元素,迭代器去添加元素 :列表迭代器才具备添加的动作

2)要么集合遍历,集合添加

 
11.5.2 List集合<非自定义对象>如何去重?

方式1:新建空集合思想,重新存储字符串类型并保证集合的元素唯一!

方式2:利用选择排序的思想去完成

选择排序的思想:使用0角标对应的元素依次和后面角标对应的元素进行比较,小的往前方法.依次这样比较,1角标,2角标…

List集合—集合列表角标从0开始,遍历当前集合,然后使用0角标对应的元素依次和后面对应的元素进行比较,如果后面的元素和前面的相同了,那么将后面的元素删除掉

 
11.5.3 List集合<自定义对象>如何去重?

Student s1 = new Student(“高圆圆”,42) ;

Student s2 = new Student(“高圆圆”,42) ;

成员信息如果一致,认为是同一个人,需要使用List集合去重!

方式1 :新建集合思想

contains(Object)方法依赖于Object的equals方法,所以集合存储的类型所在的类必须重写equals方法,否则默认使用Object的equals方法比较的地址值是否相同!

方式2 : 使用选择排序思想 将List存储的重复的学生对象进行重写!

 

11.5.4 List集合的五种遍历方式

 
11.6 Vector集合

特有功能:

添加:public void addElement(Object obj):在vector对象的末尾添加元素 ------> 一直使用的add(Object e)

删除:public boolean removeElement(Object obj):删除元素

获取功能 :

public Object elementAt(int index):获取指定位置的元素---->类似于 public Object get(int index)

public Enumeration elements() :Vector集合的专有遍历方式---->类似于 Iterator literator()

boolean hasMoreElements():判断是否有更多的元素可以迭代

Object nextElement() 获取元素

 
11.7 插入排序

时间复杂度 O(n^2)

核心思想:使用1角标对应的元素进行和0角标比较

javacv subtract方法_java-ee

 
 

版权声明


相关文章:

  • java小程序最基础骂人的2024-10-18 20:42:01
  • java基础计算方法2024-10-18 20:42:01
  • 零基础学Java(第3版)2024-10-18 20:42:01
  • java程序开发基础答案解析2024-10-18 20:42:01
  • w3c java 基础2024-10-18 20:42:01
  • java基础函数代码在哪里找2024-10-18 20:42:01
  • java 开发基础教程 pdf2024-10-18 20:42:01
  • 基础不好可以自学java吗2024-10-18 20:42:01
  • java基础编程100例pdf2024-10-18 20:42:01
  • java基础第七章异常2024-10-18 20:42:01