目录
集合框架体系
1、集合和数组的区别
2、集合分为Collection和Map两大接口
Collection
Collection集合的功能概述
迭代器(集合独有的遍历方式)
Map
Map集合的功能概述
Map三个实现类
Collection和Map的区别
3、Collection下面有两个子接口(List和Set)
List(有序可重复)
List特有功能概述
列表迭代器
List子类
ArrayList独有的方法(模拟栈 *** 作)
Set(无序不可重复)
Set子类
容器分为两种:集合和数组。
集合框架体系 1、集合和数组的区别- 长度不同:
- 内容不同:
- 元素类型不同:
Collection:存放的是单个元素;
Collection的数据结构针对元素有效。
Collection集合的功能概述boolean add(Object obj) | 添加一个元素 |
boolean addAll(Collection c) | 添加一个集合的元素 |
void clear() | 清屏 |
boolean remove(Object o) | 移除一个元素 |
boolean removeAll(Collection c) | 移除整个集合元素 |
boolean contains(Object o) | 判断集合中是否包含该的元素 |
boolean containsAll(Collection c) | 判断集合中是否包含该的集合元素 |
boolean isEmpty() | 判断是否为空 |
int size() | 元素的个数 (集合没有length()方法) |
boolean retainAll(Collection c) | 判断是否交集(示例有具体解释) |
Object[] toArray() | 集合转数组 |
示例:
Collection collection = new ArrayList();
collection.add(1);
collection.add("djvbu");
collection.add(true);
System.out.println(collection);
Collection c2 =new ArrayList();
c2.addAll(collection);//添加整个集合
c2.add(254);
c2.clear(); //清屏
c2.remove(1);//移除
c2.removeAll(collection); //移除整个集合
collection.add(999);
c2.removeAll(collection);//移除的不只是刚开始定义的c1,还有后面添加的东西
System.out.println(c2);
System.out.println(collection);
System.out.println(c2.contains(1));//判断是否包含指定的元素
System.out.println(c2.containsAll(collection)); //判断c2是否完全包含collection
System.out.println(c2.isEmpty());//判断是否为空
System.out.println(!c2.isEmpty());//判断是否不为空
System.out.println(c2.size());//集合长度:元素个数
// 判断交集,如果打印 true 表示前面的集合被修改过,被修改成两个集合的交集
// 注意:如果两个集合没有相等的元素,也会被修改,打印true,交集为空,
// 如果俩个集合完全相等,不做出改变,会打印 false(这个判断的是有没有被修改过)
System.out.println(c2.retainAll(collection));
System.out.println(c2);
Object[] object=c2.toArray();//集合转为数组
迭代器(集合独有的遍历方式)
- while循环
- for循环
- 不要多次使用next(如果使用的两个及以上的循环,下一个next循环的是下一个元素,若有一个next没有查询到元素,则会报空指针异常)
示例:
public class IteRator {
public static void main(String[] args) {
// 如果声明的是Collection 不能for循环遍历(因为没有下标的概念)
Collection collection = new ArrayList();
collection.add(123);
collection.add(1225);
collection.add(1231495);
// 获取迭代器(帮忙做循环) 通过当前的集合对象,拿到它的迭代器
Iterator iterator = collection.iterator();
// 我是谁(i)从哪来(从0开始);到哪去(10结束);怎么变化(i++)
// for(;iterator.hasNext();) {
// System.out.println(iterator.next());
// }
// 有没有下一个元素
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
Map
Map是成对出现的,里面存放的是键值对;
Map集合的数据结构只针对键有效,和值无关。
Map集合的功能概述 V put(K key,V value) | 添加元素 (另一个功能: 如果键是第一次存储, 就直接存储元素,返回null; 如果键不是第一次存在, 就用值把以前的值替换掉, 返回以前的值) |
void clear() | 移除所有元素 |
V remove(Object key) | 根据键删除元素,并把值返回 |
V remove(Object key) | 根据键删除元素,并把值返回 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
Set | 获取所有集合 (不能用for循环遍历,只能for-each或者迭代器遍历) |
V get(Object key) | 根据键获取值 |
Set keySet() | 获取集合中所有键的集合 |
Collection values() | 获取集合中所有值的集合 |
int size() | 返回集合中的键值对的对数 |
示例:
//Set> entrySet()示例
Map map =new HashMap();
map.put(1001, new student("Yom", 18));
map.put(1002, new student("Tom", 19));
map.put(1003, new student("Amy", 17));
map.put(1004, new student("Jack", 14));
// 获取键值对的集合 Entry表示一对
Set> set= map.entrySet();
// 迭代器遍历
Iterator> iterator = set.iterator();
while(iterator.hasNext()) {
// System.out.println(iterator.next());
Map.Entry entry = iterator.next();
// 获取单个键、值
entry.getKey();
entry.getValue();
}
//Set keySet()示例
// 获取里面所有的键
Set set =map.keySet();
for(Integer aaa:set) {
System.out.println(map.get(aaa));
}
// Collection values()示例
// Collection 获取集合中所有的值
Collection coll =map.values();
for(student bb:coll) {
System.out.println(bb);
}
Map三个实现类
- HashMap
键是哈希表结构,保证键的唯一性;
- LinkedHashMap
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序;
- TreeMap
键是红黑树结构,可以保证键的排序和唯一性
Collection和Map的区别- Map存储元素是成对出现的,存放的是键值对,键是唯一的,值可重复
- Collection 存储的是单个元素
- Map 集合的数据结构只针对键有效,和值无关
- Collection 的数据结构针对元素有效
有序可重复,这里的有序是指插入的顺序,有下标。
List特有功能概述void add(int index,Object element) | 在指定位置添加元素 |
Object get(int index) | 获取指定位置的元素 |
ListIterator listIterator() | List 集合特有的迭代器 |
Object remove(int index) | 根据下标删除元素 , 返回被删除的元素 |
Object set(int index,Object element) | 根据下标修改元素,返回被修饰的元素 |
- ListIterator listIterator():List集合特有的迭代器
- hasPrevious、previous、hasnext、Next
- 来回遍历
示例:
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(2,6);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
ListIterator listIterator=list.listIterator();
while (listIterator.hasNext()) {//判断是否有下一个
listIterator.next();
}
while (listIterator.hasPrevious()) {//判断是否有上一个
System.out.println(listIterator.previous());
}
listIterator.previous();//得到上一个
listIterator.hasPrevious();//判断是否有上一个
listIterator.hasNext();//判断是否有下一个
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
// list.add(1);//这里要注意不能在集合里加东西,会出现并发修改异常
listIterator.add(1);//可以在集合的迭代器里加
}
// for循环遍历
for(int i =0;i
List子类
- ArrayList:
底层是数组,查询快,增删慢;线程不安全,效率高。
- Vector:
底层是数组,查询快,增删慢;线程安全,效率低。
- LinkedList:
底层是链表。查询慢,增删快;线程不安全,效率
ArrayList独有的方法(模拟栈 *** 作)栈 *** 作:
public static void main(String[] args) {
//栈数据结构
Stack stack =new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
模拟栈 *** 作:
public class Text {
LinkedList list =new LinkedList();
public void push(Object object) {
list.add(object);
}
public Object pop() {
return list.removeLast();
}
}
public class LinkedListDemo {
public static void main(String[] args) {
Text text =new Text();
text.push("aaa");
text.push("bbb");
text.push("ccc");
text.push("ddd");
text.push("eee");
System.out.println(text.pop());
System.out.println(text.pop());
System.out.println(text.pop());
System.out.println(text.pop());
System.out.println(text.pop());
}
}
Set(无序不可重复)
无序不可重复,这里的无序是指输出的顺序和插入的顺序不一样;
Set有自己的排列方式,不是从小到大的顺序哦。
Set子类Set的底层是使用Map来实现的哦~
- HashSet
底层是哈希表,不保证顺序
- LinkedHashSet
底层是哈希表(保证唯一性)和链表(保证有序)
- TreeSet
可以排序(这里有两种排序方式:一个是自然排序排序,一个是Comparator——比较器;这里做一个了解就可以啦~过一段时间我会单独写一个详解)
我是一个刚开始学编程的小白,有什么问题希望各位大神可以帮我指出来,谢谢CSDN的大神们啦~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)