java基础之集合
集合
1、概念:集合提供一种存储空间可变的存储模型,存储的数据容量可变
2、ArrayList,可调整大小的数组实现,一种特殊的数据类型泛型。
集合体系结构
泛型
1、概述:泛型:是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型;它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,就是将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型
这种参数类型可以用在类、方法和接口中,分别被称为泛型类、泛型方法、泛型接口
2、格式
(1)<类型>
(2)<类型1,类型2,…>
3、泛型优点:将运行时的问题提前到了编译时期,并避免了强制类型转换
Collection集合
1、概述:是单列集合的顶层接口,表示为一组数组,这些对象被称为Collection的元素,JDK不提供此接口的任何直接实现方法,它提供更具体的子接口实现
2、Collection集合的常用方法
3、Collection集合的遍历
Iterator是集合专用的迭代器iteratoriterator();
实例:
public static void main(String[] args){
//创建集合对象
Collection<String> arr=new ArrayList<String>();
//添加元素
arr.add("hello");
arr.add("world");
arr.add("java");
Iterator(String> it=arr.iterator();
//hasNext()判断集合内是否还有元素
while(it.hasNext()){
//next获取下一个值
String s = it.next();
System.out.println(s);
}
}
2、增强for循环
(1)作用:简化数组和Collection集合的的遍历,其内部原理是一个Iterator迭代器
(2)格式:
for(元素数据类型 变量名:数组或者Collection集合){
}
(3)实例:
int[] arr={1,2,3,4,5};
for(int i:arr){
System.out.println(i);
}
并发修改异常
1、异常名:ConcurrentModificationException
2、原因:迭代器遍历过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致。
3、解决:用for循环遍历,然后用集合对象进行对应的操作即可。
Listlterator
1、ListIterator为列表迭代器,List集合特有的迭代器
2、常用方法
(1)E next() :放回迭代中的下一个元素
(2)Boolean hasNext():如果迭代具有更多元素,则返回
(3)E previous():返回列表中的上一个元素
(4)Boolean hasprevious:如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
(5)void add(E e)将指定元素插入列表
List集合
1、概述:
List集合为有序集合,用户可以精准的控制列表中的每个元素插入的位置,用户可以通过整数引索访问元素并搜索列表中的元素
2、特点:
(1)有序,读写的元素时顺序一致。
(2)可重复,存储的元素可重复
3、List集合常用方法
4、实例:
/*
List集合特有方法:
void add(int index,E element):在此集合中的指定位置插入指定的元素
E remove(int index):删除指定索引处的元素,返回被删除的元素
E set(int index,E element):修改指定索引处的元素,返回被修改的元素
E get(int index):返回指定索引处的元素
*/
public class ListDemo02 {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//void add(int index,E element):在此集合中的指定位置插入指定的元素
// list.add(1,"javaee");
//IndexOutOfBoundsException
// list.add(11,"javaee");
//E remove(int index):删除指定索引处的元素,返回被删除的元素
// System.out.println(list.remove(1));
//IndexOutOfBoundsException
// System.out.println(list.remove(11));
//E set(int index,E element):修改指定索引处的元素,返回被修改的元素
// System.out.println(list.set(1,"javaee"));
//IndexOutOfBoundsException
// System.out.println(list.set(11,"javaee"));
//E get(int index):返回指定索引处的元素
// System.out.println(list.get(1));
//IndexOutOfBoundsException
// System.out.println(list.get(11));
//输出集合对象
// System.out.println(list);
//遍历集合
// System.out.println(list.get(0));
// System.out.println(list.get(1));
// System.out.println(list.get(2));
//用for循环改进遍历
for (int i=0; i<list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
}
ArrayList
1、ArrayList是List集合的常用子类,ArrayList底层是数组构成,查询快,增删慢
2、常用方法:
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
public Boolean remove(object o) | 删除指定元素,返回删除是否成功 |
public E remove (int index) | 删除指定引索处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定引索处的元素,返回被修改的元素 |
public E get(int index) | 返回指定引索处的元素 |
public int size() | 返回集合中的元素的个数 |
LinkedList
1、LinkedList底层数据结构是链表,查询慢,增删快
2、常用方法:
Set集合
1、Set集合是Collection单列集合的子类,相对于List集合它不能包含重复元素,且没有带引索的方法无法使用普通的for循环进行遍历
2、遍历set集合内的字符串
public class SetChar{
public static void main(String[] args){
//创建集合对象
Set<String> set=new HashSet<String>();
//添加元素
set.add("Hello");
set.add("world");
set.add("Java");
//遍历集合
for(String s:set){
System.out.println(s);
}
}
}
HashSet集合
1、概述:为Set集合的子类,底层数据结构为哈希表,是无序的,读写顺序不一致
2、哈希值:是JDK根据对象地址或者字符串或者数字算出来的int类型的数值。
3、Hashset集合保证元素唯一,添加一个元素过程:
要保证元素唯一性,需重写hashCode和equals方法
LinkedHashSet集合
1、概述:哈希表和链表实现的Set接口,具有可预测的迭代次序,存储和取出顺序一致,不能有重复元素
TreeSet集合
1、概述:元素有序,但不是存储和取出顺序而是按照一定的规则进行排序,具体排序方式取决于构造方法
Map集合
1、概述:interface Map<K,V> 其中K为键的类型,V为值得类型,Map集合为双列集合
如:
学号 | 姓名 |
---|---|
1 | 李四 |
2 | 张三 |
3 | 王五 |
2、Map集合的常用方法
3、实例:
public class MapDemo {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map = new HashMap<String,String>();
//V put(K key, V value) 将指定的值与该映射中的指定键相关联
map.put("1","王祖蓝");
map.put("2","张曼玉");
map.put("3","王祖贤");
map.put("3","柳岩");
//输出集合对象
System.out.println(map);
}
HashMap
1、概述: HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,允许多条记录的值为null。