集合
集合框架
1.Collection接口:单列集合,用来存储一个一个的对象
list接口:存储有序、可重复的数据 动态数组
ArrayList
LinkedList
Vector
Set接口:存储无序、不可重复的数据 集合
2.Map接口:双列集合,用来存储一对一对(key-value)的数据
Collection的方法
import java.io.Serializable;
import java.util.*;
/**
* Collection接口中的方法使用
*/
class person{
String name;
int age;
public person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SetTest {
public static void main(String[] args) {
// Collection coll = new ArrayList();
// //1.add(Object)
// coll.add(1);
// coll.add("3");
// //2.size() 返回集合元素的数量
// System.out.println(coll.size());
// Collection coll1 = new ArrayList();
// coll1.add(1);
// //3.addAll(Collection c) 将另一个集合的元素添加到一个集合
// coll.addAll(coll1);
// //4.isEmpty() 判断集合中是否有元素
// System.out.println(coll.isEmpty());
// //5.clear() 清除集合中所有的元素
// coll.clear();
// coll1.add(new String("123"));
//6.contains()方法 判断集合中是否包含所给元素
System.out.println(coll1.contains(new String("123")));
//如果同时new两个值相同的String对象,会返回True
//因为在ArrayList的源码中调用的是equals方法,String是重写了equals方法
coll1.add(new person("Jerry",12));
// System.out.println(coll1.contains(new person("Jerry",12)));
// //这个情况会返回false,因为person类没有重写equals方法,默认判断地址,而不是内容
// //7.containsAll(Collection c) 判断另一个集合的元素是否都在该集合中
// coll.containsAll(coll1);
// //8.remove() 移除元素 同样会调用equals方法,先找到他再删除
// coll.remove("123");
// //9.removeAll(Collection c) 移除当前集合中所有集合c的元素
// coll.removeAll(coll1);
Collection collection=Arrays.asList("123",123); //Arrays.asList()方法返回List
Collection coll=Arrays.asList("123",123,345);
Collection coll1=Arrays.asList("123");
//10.retainAll(Collection c) 移除未包含在Coll1中的所有元素,并把交集赋给coll1
coll1.retainAll(coll);
System.out.println(coll1);
// coll.removeAll(coll1);
System.out.println(coll);
//11.equals()方法 判断两个集合是否相等,包括顺序和内容
//12.toArray() 将集合转换为数组
Object[] objects = coll.toArray();
for (Object c:objects
) {
System.out.println(c);
}
//asList() 将数组转化为集合
List<String> strings = Arrays.asList(new String[]{"23", "rg"});
System.out.println(strings);
//输出结果为:[23, rg]
List<int[]> ints = Arrays.asList(new int[]{123, 456});
System.out.println(ints);
//输出结果为:[[I@10f87f48] 当作是一个元素,本来是List存的是对象
//非静态方法:iterator(),迭代器Iterator接口,用于集合元素的遍历
Iterator iterator = coll.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
itertor迭代器的使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTVVU6Qq-1597590083246)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20200711172725983.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcIlvNZn-1597590120512)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20200711172725983.png)]
ArrayList的源码分析
//ArrayList的源码分析 1.7
ArrayList list = new ArrayList(); //底层创建了长度是10的Object[]数组elementData
list.add(1); //如果此次的添加导致底层elementData数组容量不够,则扩容
//默认情况,扩容为原来容量的1.5倍,同时需要将原有数组中的数据复制到新的数组
//建议开发中使用带参的构造器
ArrayList list = new ArrayList(capacity);
//ArrayList的源码分析 1.8
ArrayList list1 = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度
list1.add(1);//第一次调用add()时,底层才创建了长度10的数组;
如果详细,请参考源代码!
ArrayList类新添加的方法
//ArrayList多的方法
ArrayList list1 = new ArrayList();//底层Object[] elementData初始化为{},并没有创建长度
//void add(int index,Object ele)
list1.add(2,3);
//boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来
//int indexOf(Object obj):返回obj在集合中首次出现的位置
//int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
//Object remove(int index):移除指定index位置的元素,并返回此元素
//Object set(int index,Object ele):设置指定index位置的元素为ele
//List sublist(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合
set接口没有新增的方法
set接口的方法和Collection接口的方法一样
set接口来存储无序、不可重复的数据
1.无序性:不等于随机性,存储的顺序是按照哈希值
2.不可重复性:调用类的哈希方法先计算出元素的哈希值,放到数组的一个位置,如果这个位置无元素,则直接添加,若有,则使用该类的equals方法,判断是否相等。若不相等,则使用链表,若相等,则不添加