集合框架
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) 把这个字母转换成大写