List集合 、Set集合 、Map集合
一、数组、类和集合的特点
数组特点:类型固定,长度固定
类的特点:不同类型的成员属性,共同描述一个实体类
集合特点:类型不固定,长度也不固定,随意存放任何数据
二、集合框架的继承结构
三、List
List 接口存储一组不唯一(可以重复),有序(插入顺序)的对象。
3.1ArrayList
存储原理是一个数组。
3.2LinkedList
存储原理是一个链表,在元素的前后分别有一个前置结点和后置结点,用于连接集合中的上一个元素和下一个元素,依次“手拉手”,构成一条链式数据的集合。
除了ArrayList的方法外,还有一些特有的方法
3.3对比
- ArrayList实现了长度可变的Object类型数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
- LinkedList采用链表存储方式,插入、删除元素时效率比较高
效率不同的原因:
Linkedlist在执行删除和添加操作时,只会对相邻的两个元素有影响,
Arraylist由于它的本质是一个数组,在执行删除和添加操作时,后面所有的元素的地址值都将出现移位。
3.4遍历
- (1)循环遍历
System.out.println(alist);
- (2)for循环
for (int i = 0; i <alist.size() ; i++) {
System.out.println(alist.get(i));
}
-
(3)增强for循环
for (Object o:alist
) {
System.out.println(o);
}
- (4)迭代器--搭配while循环
```javascript
Iterator it = alist.iterator();//创建迭代器对象
while(it.hasNext()){
System.out.println(it.next());
}
3.5特例
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("hello");
list.add(666);
list.add(1);//int-Integer
System.out.println(list);
list.remove(new Integer(1));//删除了集合中的1
//list.remove(1);//删除了集合中下标为1的元素
System.out.println(list);
}
四、Set集合
4.1特点:
存储一组
唯一
(不允许出现重复的元素),
无序
(没有index下标)的
对象
,HashSet是Set接口常用的实现类。
只有添加和删除的方法,没有修改和查找的方法。
4.2方法
//创建Set集合
HashSet set = new HashSet();
//添加数据
set.add("曹操");
set.add("刘备");
set.add(66);
//删除
set.remove(66);
//获取所有元素-循环遍历增强for循环或者迭代器
//循环中加上if判断,可以查找元素
for (Object o:set
) {
System.out.println(o);
}
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println("it.next() = " + it.next());
}
五、Map集合
5.1特点
Map接口专门处理键值映射的数据,可以根据键实现对值的操作。
map(key,value),key不允许重复,一个key对应一个value(唯一的映射)
5.2方法
public static void main(String[] args) {
//创建Map接口的常用实现类HashMap对象,存入数据
HashMap map = new HashMap();
//增加方法
map.put(1,"曹操");
map.put(1,"孙权");
map.put("蜀国","孔明");
System.out.println(map.size());
//特点:key不允许重复,一个key对应一个唯一的value
//删除方法
Object o= map.remove(1);
boolean b =map.remove(1,"曹操");
System.out.println(o);//删除的value
System.out.println(b);//是否删除成功
//替换方法
map.replace("蜀国","庞统");
System.out.println(map);
map.replace("蜀国","庞统","张飞");
System.out.println(map);
}
5.3遍历
5.3.1遍历所有key
Set keys = map.keySet();
for (Object key:keys){
System.out.println(key+"--"+map.get(key));
}
5.3.1遍历所有value
Collection values = map.values();
for (Object value:values
) {
System.out.println(value);
}
5.3.1遍历所有键值对
Set entries = map.entrySet();
for (Object entrie:entries
) {
Map.Entry en = (Map.Entry) entrie;//向下转型,Object-》Map.Entry
System.out.println(en.getKey()+"---"+en.getValue());
}
备注:
函数:一个x对应一个y
方程:一个x对应多个y