Java基础-Day06 ---------------------持续更新

unadlib

关注

阅读 72

2022-04-13

集合框架

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

集合:

最常用的一种容器。为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象

集合特点:

1.集合用来存储对象,并且是对象的地址,不是对象本身

2.集合可以存储任何类型的对象,集合长度可变

与数组区别:

1.集合只可以存储对象,长度可变,并且可以存储不同类型的对象[引用]

2.数组即可以存储对象又可以存储基本数据类型,长度固定,并且同一数组存储的数据类型必须相同

Collection接口


Collection 接口存储一组不唯一,无序的对象,List和Set是此接口的子接口;

Collection的共性方法

1.添加元素:boolean add(Object obj)

2.删除元素:boolean remove(元素)

3.清空集合:void clear()

4.判断元素是否存在该集合中:boolean contains(元素)

判断集合是否为空:boolean isEmpty()

5.获取元素个数:int size()

6.取出元素利用迭代器:Interator it=集合.iterator();

List集合(对脚标可以进行操作)


List 接口存储一组不唯一,有序(插入顺序)的对象:

ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高LinkedList采用链表存储方式。插入、删除元素时效率比较高

1.List集合方法:

在指定位置添加元素:add(int index,元素)

删除指定位置的元素: remove(int index)修改指定位置的元素: set(int index,newElement)

通过角标获取指定位置元素: get(int index)

注意:List集合判断元素是否相同,依据的是元素的equals()方法,contains方法[是否包含]和remove方法会调用元素equals方法。

2.List集合的特有迭代器:ListIterator

ListIterator 是Iterator的子接口。

在迭代的过程中,不可以通过集合对象的方法来操作。集合中的元素,会发生ConcurrentModificationException异常。所以在迭代时,只能用迭代器的方法来操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除的动作。如果想要其他的操作,如添加、修改等,就需要使用其子接口ListIterator。创建ListIterator对象:ListIterator li=al.listIterator();

3.LinkedList

(1)它的特有方法添加元素:

获取元素:

删除元素:

Set集合


Set 接口存储一组唯一,无序的对象 :

1.HashSet:底层使用的是哈希表结构,线程不同步,存储元素无序,元素不可重复。

注:关于HashSet如何保证元素唯一性:

是通过元素的两个方法:hashCode和equals来完成的。如果元素的hashCode值相同,才会判断equals是否是true。如果元素的hashCode值不同,不会调用equals方法。所以对于自定义对象,要存入HashSet集合中,为了保证元素的唯一性,必须复写HashCode方法和equals方法。

关于HashCode:哈希码值相等,对象不一定相等;哈希码值不相等,对象一定不相等

2.TreeSet:底层使用的是二叉树结构,可以对Set集合中的元素进行排序[按字母的自然顺序,且大写的在小写的字母前面]。

TreeSet集合存储自定义对象,对对象实现排序功能的方法有两种;

第一,元素自身具备比较性,即实现Comparable接口并复写comparaTo方法

第二,集合本身具备比较性,即在集合的构造函数里传入

Comparator接口类型的对象。即,定义一个类实现Comparator接口,并覆盖compara方法。并将此类对象作为参数传递给TreeSet集合的构造函数中。

Map集合[与Collection无关,是独立的接口]


Map接口存储一组键值对象,提供key到value的映射

.Map集合的共性方法添加元素: put(K key, V value )删除元素: remove(Object key) 清空集合: clear()

判断: boolean containsKey(Object key) 如果此映射包含指定键的映射关系,则返回 true。

boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true

boolean isEmpty()//判断集合是否是空的。 获取: V get(Object key) //获取键所对应的值

int size() //获取集合的大小

Map的子类:

(1)Hashtable:底层是哈希表数据结构,不可以存入null键和null值用作键的对象必须实现hashCode方法和equals 方法;该集合是线程同步的。

(2)HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。效率较高

(3)TreeMap:底层是二叉树数据结构,线程不同步。可以用于给Map集合中的键进行排序。Map 的key存储结构类似于Set,value存储结构类似于List

对于Map集合中元素的取出方式

(1)利用keySet:将map中的所有键存入set集合,因为set具备迭代器,所以可以通过迭代器方式取出所有的键,再根据get方法,获取每一个键对应的值。

(2)entrySet:将map集合的映射关系直接存入到了set集合中,而这个关系数据类型就是Map.Entry,Entry其实就是Map中的一个static内部接口。

HashMap保证元素唯一性的原理和HashSet相同,TreeSet对元素的排序原理和TreeSet相同.

包装类

Integer:

compareto()

equals()

hashCode()

parseInt() [字符串转变成基本数据类型]

toBinaryString() [整数转成二进制]

toOctalString() [整数转成八进制]

toHexString() [整数转成十六进制]

valueof() [-127--128] 不超出范围valueof性能要好,因为有高速缓存,超出范围不如用new

character没有parseInt方法

compareto()

isDigit() [是否是数字]

isLetter() [是否是字符]

isWhitespace() [是否是回车换行以及空格]

isLowerCase() [是否是小写]

isUpperCase() [是否是大写]

toLowerCase() [转成小写]

toUpperCase() [转成大写]

String

charAt(index) [下标处的字符]

concat() [在字符串后面添加字符串]

contains() [包含]

endWith() [以...结尾]

indexof() [...的下标]

isEmpty() [判断是否为空]

lasIndeof() [从后往前数下标]

length() [字符串长度]

repalce("a",''b'') [b替换a]

startWith() [判断是否以...开头]

substring() [截取字符串(左闭右开)]

split('a') 0

split('a') 1

包裹类型有一些特殊的用途,比如Integer.MAX_VALUE是int型变量的最大值

Character.idDigit(char ch) 判断这个字符是不是数字

Character.isLetter(char ch) 判断这个字符是不是字母

Character.isLetterOrDigit(char ch) 判断这个字符是不是字母或数字

Character.isLowerCase(char ch) 判断这个字符是不是小写字母

Character.isUpperCase(char ch) 判断这个字符是不是大写字母

Character.isWhitespace(char ch) 判断这个字母是不是一种空格

Character.toLowerCase(char ch) 把这个字母转换成小写

Character.toUpperCase(char ch) 把这个字母转换成大写

精彩评论(0)

0 0 举报