目录
一.List集合
.有序
.有索引
.可重复
1.1ArrayList
1.语法
public class ArrayListed {
public static void main(String[] args) {
List<Integer> arrayList=new ArrayList();
arrayList.add(1);
System.out.println(arrayList.get(0));
} }
2.常用方法
方法 | 描述 |
---|---|
add(Object o) | 添加数据 |
add(int index,Object o) | 在制定索引处添加元素 |
size() | 获取元素个数 |
get(int index) | 获取索引处的元素 |
isEmpty() | 判断集合是否为空 |
indexOf(Object o) | 判断某个元素第一次出现的位置 |
E remove(int index) | 移除索引处元素,并返回该元素 |
boolean remove(Object o) | 移除元素 |
clear() | 清空元素 |
set(int index ,E e) | 修改索引处的元素 |
iterator() | 获取迭代器 |
trimToSize() | 减少容量指当前元素个数 |
contains(Object o) | 判断是否包含某个元素 |
lastIndexOf(Object o) | 判断某个元素最后一次出现的位置 |
toArray() | 将集合转换为数组 |
addAll(Collection<? extends E> c) | 集合中添加集合 |
addAll(int index, Collection<? extends E> c) | 索引处添加集合 |
retainAll(Collection c) | 求两个集合的交集 |
removeAll(Collection<?> c) | 移除传入集合内的元素 |
subList(int fromIndex, int toIndex) | 获取子集合 |
3.ArrayList遍历:
public class ArrayListed {
public static void main(String[] args) {
//定义集合
List<Integer> arrayList=new ArrayList();
//向集合中添加元素
arrayList.add(1);
arrayList.add(3);
arrayList.add(5);
arrayList.add(7);
//遍历,将arraylist中的数据放入list
for (Integer list :arrayList) {
System.out.println(list);
}
//使用迭代器遍历
Iterator it=arrayList.iterator();
while(it.hasNext())
{
int i= (int) it.next();
System.out.println(i);
}
}
}
4.ArrayList特点
(1)ArrayList底层是数组,所以查找遍历快,增删慢
(2)ArrayList可随着元素的增长而自动扩容,正常扩容到原来的1.5倍
(3)继承List接口(有序,有索引,可重复)
(4)都是非线程安全
1.2LinkedList
1.语法
List<Integer> linkedList=new LinkedList<>();
2.常用方法
方法 | 描述 |
---|---|
add(Object o) | 添加数据 |
add(int index,Object o) | 在制定索引处添加元素 |
size() | 获取元素个数 |
get(int index) | 获取索引处的元素 |
isEmpty() | 判断集合是否为空 |
indexOf(Object o) | 判断某个元素第一次出现的位置 |
E remove(int index) | 移除索引处元素,并返回该元素 |
boolean remove(Object o) | 移除元素 |
clear() | 清空元素 |
set(int index ,E e) | 修改索引处的元素 |
addFirst(E e) | 链表首部添加元素 |
addLast(E e) | 链表末尾添加元素 |
removeFirst() | 移除首节点 |
removeLast() | 移除尾节点 |
getFirst() | 获取第一个节点 |
getLast() | 获取最后一个几点 |
3.遍历
public static void main(String[] args) {
//定义集合
List<Integer> linkedList=new LinkedList<>();
//向集合中添加元素
linkedList.add(1);
linkedList.add(3);
linkedList.add(5);
linkedList.add(7);
//遍历,将arraylist中的数据放入list
for (Integer list : linkedList) {
System.out.println(list);
}
//使用迭代器遍历
Iterator it=linkedList.iterator();
while(it.hasNext())
{
int i= (int) it.next();
System.out.println(i);
}
}
4.特点
1)ArrayList底层是双向链表,所以查找遍历慢,增删快
2)继承List接口(有序,有索引,可重复)
3)非线程安全
二.Set
.无序
.无索引
.不可重复
2.1hashSet
提高查询效率 ;数据唯一性 ;存储在散列表中
1.语法
//定义集合
Set<String> hashSet= new HashSet<>();
2.方法
方法 | 描述 |
---|---|
add(Object o) | 添加元素 |
remove(Object o) | 移除元素 |
isEmpty() | 判断元素是否为空 |
3.遍历
public class Test {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
//添加元素
set.add("陈忠实");
set.add("贾平凹");
set.add("路遥");
set.add("张爱玲");
set.add("林徽因");
boolean a = set.add("徐志摩");
System.out.println(a);
boolean b = set.add("徐志摩");
System.out.println(b);
//foreach
for (String s : set) {
System.out.println(s);
}
//iterator
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}
HashSet集合判断两个元素相等的标准
1.两个对象通过equles()判断比较返回值是true。
2.两个对象hashCode()方法返回值相等。
注意:
若这两个条件有一个不满足,则对象不相等,可以添加成功。如果两个对象的hashCode()方法返回值相等,但是两个对象通过equals()方法比较返回false,HashSet会以链式结构将两个对象保存在同一位置,这将导致性能下降,因此在编码时应避免出现这种情况。
5.HashSet查找原理:
在查找元素时,HashSet先计算元素的HashCode值(也就是调用对象的hashCode方法的返回值),然后直接到hashCode值对应的位置去取出元素即可,这就是HashSet速度很快的原因。
三.Map
1.map接口定义
Map接口采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,因此,Map集合里保存两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任意引用类型的数据。
2.方法
方法 | 描述 |
---|---|
put(K key,V value) | 添加键值对 |
get(Object key) | 根据键获取值 |
keySet() | 获取keySet |
entrySet() | 获取entrySet |
clear() | 清空 |
containsKey(Object key) | 判断是否存在key |
remove(Object key) | 根据key删除键值对 |
remover(Object key,Object value) | 根据key和value删除键值对 |
size() | 获取元素个数 |
isEmpty() | 判断map是否为空 |
3.遍历
//利用keySet()方法获取keySet
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("阿紫",30);
map.put("梦郎", 20);
map.put("李秋水", 20);
map.put("天山童姥", 60);
map.put("梦姑",18);
//先获取keySet
Set<String> set = map.keySet();
//获取迭代器
Iterator<String> it = set.iterator();
//利用迭代器遍历
while (it.hasNext()) {
String key = it.next();
int i = map.get(key);
System.out.println("key==========="+key);
System.out.println("value========="+i);
}
}
//利用entrySet()获取entrySet
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("乔峰",30);
map.put("虚竹", 20);
map.put("李秋水", 20);
map.put("天山童姥", 60);
map.put("梦姑",18);
//获取键值对集合
Set<Entry<String, Integer>> set = map.entrySet();
//遍历set
for (Entry<String, Integer> entry : set) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("key=========="+key);
System.out.pintln("key=========="+value);
}
}