栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中“集合类”与“常用类”相关知识

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中“集合类”与“常用类”相关知识

文章目录
  • 前言:
  • 一、集合类
    • 1.1 List
      • 1、List的特点
      • 2、List的几个方法
    • 1.2 Map
      • 1、使用Map
      • 2、遍历Map
    • 1.3 Set
  • 二、常用类
    • 2.1 object
    • 2.2 String
      • 1、获得字符串长度
      • 2、截取一个字符
      • 3、字符串相等比较
    • 2.3 StringBuffer
    • 2.4 StringBuilder
    • 2.5 System
    • 2.6 Data

前言:

这一节我们一起来学习一下Java的一些技术,前面我已经详细的讲解了关于类的知识点,这章我不做多讲,现在进入我们的主题------集合与常用类。

一、集合类

我们先来了解一下什么是集合,这个名词我们只在数学上面听过,而在Java上面他又有什么不一样的意思呢?在Java中,如果一个Java对象可以在内部持有若干其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。

我们前面所学的数组显然是一个集合,来看一段代码:

String[] ss = new String[10]; // 可以持有10个String对象
ss[0] = "Hello"; // 可以放入String对象
String first = ss[0]; // 可以获取String对象
1.1 List

List是最基础的一种集合类,它是有序链表。那么我们看到这个有序两个字,是不是就想到了数组。其实,List与数组是十分类似的。
List内部的元素也是按照先后顺序进行存放的,每个元素都可以通过索引来找到,List的索引与数组一样,都是从0开始。

1、List的特点

如果我们用数组来增加或删除一个元素时,我们还要考虑前后元素的移动。而使用ArrayList就减少了这一繁琐操作,当我们对元素进行增减时,ArrayList会自动移动需要移动元素。
来看一个例子:

size=5
┌───┬───┬───┬───┬───┬───┐
│ A │ B │ C │ D │ E │   │
└───┴───┴───┴───┴───┴───┘

在ArrayList里面,有五个元素,但是有六个空位,如果我们想要添加一个元素在B的后面,那么他会出现这种情况:

size=6
┌───┬───┬───┬───┬───┬───┐
│ A │ B │ F │ C │ D │ E │
└───┴───┴───┴───┴───┴───┘

在元素B的后面,元素C、D、E会向后移动一个位置,为元素F留下一个位置,并且将size加1即可。
如果这时候我们要继续添加元素的话mArrayList会自动创建一个更大的数组,将旧的数组搬到新的数组里,

size=6
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ A │ B │ F │ C │ D │ E │   │   │   │   │   │   │
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘

因此,我们用ArrayList更为方便一些,当增减元素时候,我们无需考虑元素的移动问题,只需要将size的值进行相应的变动即可。

2、List的几个方法

(1)在末尾添加一个元素:void add(E e)
(2)在指定索引添加一个元素:void add(int index, E e)
(3)删除指定索引的元素:int remove(int index)
(4)删除某个元素:int remove(Object e)
(5)获取指定索引的元素:E get(int index)
(6)获取链表大小(包含元素的个数):int size()

1.2 Map 1、使用Map

我们虽然可以利用List来查找某一个数据,但是操作太过于繁杂,我们将要对比一半的数据来查找,这种效率太过于低下。因而我们引入Map来解决这种问题,Map这种键值(key-value)映射表的数据结构,作用就是能高效通过key快速查找value(元素)。

代码如下:

public class Main {
    public static void main(String[] args) {
        student s=new student ("xming",98);
        Map map=new HashMap<>();
        map.put("xming",s);
        student target=map.get("xming");
        System.out.println(target==s);
        System.out.println(target.score);
        student another=map.get("BOb");
        System.out.println(another);
    }
}
class student{
    public String name;
    public int score;
    public student (String name,int score){
        this.name=name;
        this.score=score;}
}

通过上述代码可知:Map是一种键-值映射表,当我们调用put(K key, V value)方法时,就把key和value做了映射并放入Map。当我们调用V get(K key)时,就可以通过key获取到对应的value。如果key不存在,则返回null。和List类似,Map也是一个接口,最常用的实现类是HashMap。

2、遍历Map

(1)在for循环中使用entries实现Map的遍历

Map map = new HashMap();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
for(Map.Entry entry : map.entrySet()){
    String mapKey = entry.getKey();
    String mapValue = entry.getValue();
    System.out.println(mapKey+":"+mapValue);
}

(2)在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;

Map map = new HashMap();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
//key
for(String key : map.keySet()){
    String value = map.get(key);
    System.out.println(key+":"+value);
}
//value
for(String value : map.values()){
    System.out.println(value);
}

(3)通过Iterator遍历

Iterator> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Entry entry = entries.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+":"+value);
}

1.3 Set

我们知道,Map用于存储key-value的映射,对于充当key的对象,是不能重复的,并且,不但需要正确覆写equals()方法,还要正确覆写hashCode()方法。但是,如果我们只需要存储不重复的key,并不需要存储映射的value,那么这时,就可以使用Set。

Set用于存储不重复的元素集合,它主要提供以下几个方法:

(1)将元素添加进Set:boolean add(E e)
(2)将元素从Set删除:boolean remove(Object e)
(3)判断是否包含元素:boolean contains(Object e)

来看一段代码图:

       ┌───┐
       │Set│
       └───┘
         ▲
    ┌────┴─────┐
    │          │
┌───────┐ ┌─────────┐
│HashSet│ │SortedSet│
└───────┘ └─────────┘
               ▲
               │
          ┌─────────┐
          │ TreeSet │
          └─────────┘

这个图很清楚说明了Set接口特点:
(1)HashSet是无序的,因为它实现了Set接口,并没有实现SortedSet接口;
(2)TreeSet是有序的,因为它实现了SortedSet接口。

二、常用类 2.1 object

我们在前面学了,如果在继承中,没有标明extend,那么它默认为Object类。所以我们可以将Object成为所有类的父类。

class class{                                         
}
 
 class class extends Object{
 }                                                

Object类提供无参构造方法 ,之所以提供这样的无参构造,是因为在子类对象实例化时都会默认调用父类中的无参构造方法,这样在定义类时即使没有明确定义父类为Object,读者也不会感觉代码的强制性要求。

看一个表格:

2.2 String

字符串类的相关方法有很多。

1、获得字符串长度

确定字符串长度的方法格式如下。
public int length () ;

String s2=new String ("我爱你china") ;

System. out. println (s2.length());

2、截取一个字符

public char charAt (int index)

该方法返回指定索引处的char值。索引范围为从0到length()-1。字符串的第一个char值在索引0处,第二个在索引1处,依此类推。举例如下。

char ch;
ch=“abc”.charAt(1) ;返回’b’
3、字符串相等比较

public boolean equals (String s)

字符串对象调用String 类的equals方法,比较当前字符串对象是否与参数制定的字符串s对象相同。举例如下。

String s1=“Hello”;

String s2=new String (“Hello”);

s1.equals(s2); //true
2.3 StringBuffer

下面内容摘自《Java语言设计》,并且经过整理后的知识点,资料最全面,值得收藏起来。

(1)将boolean参数的字符串表示形式追加到序列中。

StringBuffer append(boolean b);

(2)将char参数的字符串表示形式追加到此序列。

StringBuffer append(char c);

(3)将char数组参数的字符串表示形式追加到此序列。

StringBuffer append(char[] str);

(2)将char数组参数的子数组的字符串表示形式追加到此序列。

StringBuffer append(char[] str, int offset, int len);

(4)将指定的内容附加CharSequence到此序列。

StringBuffer append(CharSequence s)

(5)将指定的子CharSequence序列追加到此序列。

StringBuffer append(CharSequence s, int start, int end);

(5)将double 参数的字符串表示形式追加到此序列。

StringBuffer append(double d);

(6)将float 参数的字符串表示形式追加到此序列。

StringBuffer append(float f);

(7)将int 参数的字符串表示形式追加到此序列。

StringBuffer append(int i);

(8)将long 参数的字符串表示形式追加到此序列。

StringBuffer append(long lng)

(9)附加Object参数的字符串表示形式。v

StringBuffer append(Object obj);

(10)将指定的字符串追加到此字符序列。

StringBuffer append(String str);

(11)将指定的内容附加StringBuffer到此序列。

StringBuffer append(StringBuffer sb);

(12)将codePoint参数的字符串表示形式追加到此序列。

StringBuffer appendCodePoint(int codePoint);

(13)返回当前容量。

int capacity();

(14)返回char指定索引处的此序列中的值。

char charAt(int index);

(15)返回指定索引处的字符(Unicode代码点)。

int codePointAt(int index);

(16)返回指定索引之前的字符(Unicode代码点)。

int codePointBefore(int index);

(17)返回此序列的指定文本范围内的Unicode代码点数。

int codePointCount(int beginIndex, int endIndex);

(18)删除此序列的子字符串中的字符。

StringBuffer delete(int start, int end);

(19)char按此顺序删除指定位置。

StringBuffer deleteCharAt(int index);

(20)确保容量至少等于指定的最小值。

void ensureCapacity(int minimumCapacity)

(21)字符从此序列复制到目标字符数组中dst。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);

(22)返回指定子字符串第一次出现的字符串中的索引。

int indexOf(String str)

(23)从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。

int indexOf(String str, int fromIndex);

(24)将boolea参数的字符串表示形式插入此序列中。

StringBuffer insert(int offset, boolean b);

(25)将char参数的字符串表示形式插入此序列中。

StringBuffer insert(int offset, char c);

(26)将char数组参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, char[] str);

(27)将str数组参数的子数组的字符串表示形式插入到此序列中。
StringBuffer insert(int index, char[] str, int offset, int len);

(28)将指定的内容CharSequence插入此序列中。
StringBuffer insert(int dstOffset, CharSequence s);

(29)将指定的子CharSequence序列插入此序列中。
StringBuffer insert(int dstOffset, CharSequence s, int start, int end);

(30)将double参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, double d);

(31)将float参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, float f);

(32)将第二个int 参数的字符串表示形式插入到此序列中。
StringBuffer insert(int offset, int i);

(33)将long参数的字符串表示形式插入此序列中。
StringBuffer insert(int offset, long l);

(34)将Object 参数的字符串表示形式插入此字符序列。
StringBuffer insert(int offset, Object obj);

(35)将字符串插入此字符序列。
StringBuffer insert(int offset, String str);

(36)返回指定子字符串最后一次出现在字符串中的索引。
int lastIndexOf(String str);

(37)返回指定子字符串最后一次出现在字符串中的索引。
int lastIndexOf(String str, int fromIndex);

(38)返回该字符串的长度(字符数)。
int length();

(39)返回此序列中与代码点给定index的偏移量的索引codePointOffset。
int offsetByCodePoints(int index, int codePointOffset);

(40)用指定的字符替换此序列的子字符串中的字符String。
StringBuffer replace(int start, int end, String str);

(41)返回此字符序列的反向替换。
StringBuffer reverse()

(42)指定索引处的字符设置为ch。
void setCharAt(int index, char ch);

(43)设置字符序列的长度。
void setLength(int newLength);

(44)返回一个新的字符序列,它是该序列的子序列。
CharSequence subSequence(int start, int end);

(45)返回一个新的String,包含此字符序列中当前包含的字符的子序列。
String substring(int start);

(46)返回一个新的String,包含此序列中当前包含的字符的子序列。
String substring(int start, int end);

(47)返回表示此序列中数据的字符串。
String toString()

(48)尝试减少用于字符序列的存储空间。
void trimToSize();

2.4 StringBuilder

说明如下:

StringBuilder();  //以默认容量创建空的StringBuilder对象
StringBuilder(int capacity);  //以指定容量创建空的StringBuilder对象
StringBuilder(String str);  //以指定的字符串创建StringBuilder对象
//获取功能
int capacity();//容量
int length();
//添加功能
append(int value);//追加。可以追加多种类型
insert(int offset,String s);//在指定的位置插入指定数据
//删除功能
deleteCharAt(int index);//删除指定索引处的元素
delete(int start,int end);//删除[start,start-1]范围内的元素
替换功能
replace(int start,int end,String s);//将[start,end-1]范围内的元素替换成指定字符串
反转功能
reverse();//元素反转
截取功能
String subString(int start);//截取指定位置一直到末尾
String subString(int start,int end);//截取[start,end-1]范围

2.5 System

System没有构造方法
成员方法:

gc( );  //运行垃圾回收处理机制(系统会在某个不确定的时间调用该方法)
会调用finalize( ),进行垃圾回收。
exit(int status);  //退出JVM,0表示非异常退出。
currentTimeMills(); //获取当前时间毫秒值。
arrayCopy(Object[] srcArr,int srcPos,Object[] desArr,int destPos,int len); //数组复制。
2.6 Data

日期类:

//构造方法
Date( ); //以当前时间毫秒值创建Date对象。
Date(long time); //以指定的毫秒值创建Date对象。
//成员方法
long getTime( ); //获取Date对象的毫秒值。
setTime(long time); //设置Data对象的毫秒值。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998664.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号