集合框架:为了表示和操作集合而规定的统一的标准结构体系由一组用来操作对象的接口组成
集合框架:Collection Map Iterator(迭代器)
1.Collection 集合框架(接口)
3.3.1 来自Collection的方法
boolean | add)(E e) 确保此 collection 包含指定的元素(可选操作)。 |
---|---|
boolean | addAll)(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中 |
void | clear)() 移除此 collection 中的所有元素(可选操作)。 |
boolean | contains)(Object o) 如果此 collection 包含指定的元素,则返回 true。 |
boolean | containsAll)(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 |
boolean | equals)(Object o) 比较此 collection 与指定对象是否相等。 |
int | hashCode)() 返回此 collection 的哈希码值。 |
boolean | isEmpty)() 如果此 collection 不包含元素,则返回 true。 |
Iterator[E](https://www.yuque.com/java/util/Collection.html) | iterator)() 返回在此 collection 的元素上进行迭代的迭代器。 |
boolean | remove)(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 |
boolean | removeAll)(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素 |
boolean | retainAll)(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素 |
int | size)() 返回此 collection 中的元素数。 |
Object[] | toArray)() 返回包含此 collection 中所有元素的数组。 |
1.1 list(接口):
继承Collection接口:允许重复的有序集合
方法:
void add(int index,Object o) 在指定位置上添加元素
Boolean addAll(int index,Collection o) 在指定位置上添加集合元素
Object get(int index) 返回指定位置上的元素
Object set(int index,Object o) 用o替换index上的元素 并返回旧元素
Object remove(int index) 删除指定位置上的元素
1.1.1 ArrayList类(不安全):
实现list接口 优点:对元素进行快速的随机访问 缺点:在元素中插入、删除速度比较慢
1.1.2 LinkedList类(不安全):
实现list接口 优点:优化顺序访问、优化了插入和删除效率 缺点:遍历效率不高
void addFirst() 将对象添加至列表开头
void addLast() 将对象添加至末尾
Object getFirst() 获取第一个元素
Object getLast() 获取最后一个元素
有序集合的遍历:普通for循环
增强for循环
迭代器
1.2 Set接口:
继承了Collection接口 定义了一个不允许重复项出现的集合 没有引入新的方法 无序 无下标
1.2.1 HashSet类:
特点 没有重复的集合类,元素没有顺序、没有同步机制、内部依靠使用HashMap实现
1.2.2 TreeSet类:
特点 是一个有序集合,按照一定规则指定元素集合 内部是TreeMap实现
无序集合的遍历:迭代器:
无序集合的遍历:迭代器:
Iterator<String> it = sets.iterator();
while ( it.hasNext() ){
String obj = it.next();
System.out.println(obj);
}
增强for :<br />
增强for :
for( String obj : sets){
char c = obj.charAt(0);
if(c=='H'){
System.out.println(obj);
}
}
2.Map集合框架(接口):
把键对象和值对象进行映射的集合,他每一个元素包含一对键(key)和值(value),
在进行检索使用时只需要给出键就能返回值 ,一个Map集合中不能包括相同的Key,每个key只能映射一个value
void | clear)() 从此映射中移除所有映射关系(可选操作)。 |
---|---|
boolean | containsKey)(Object key) 如果此映射包含指定键的映射关系,则返回 true。 |
boolean | containsValue)(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。 |
Set[Map.Entry](https://www.yuque.com/java/util/Map.Entry.html)<[K](https://www.yuque.com/java/util/Map.html),[V](https://www.yuque.com/java/util/Map.html)> | entrySet)() 返回此映射中包含的映射关系的 Set 视图。 |
boolean | equals)(Object o) 比较指定的对象与此映射是否相等。 |
V | get)(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null 。 |
int | hashCode)() 返回此映射的哈希码值。 |
boolean | isEmpty)() 如果此映射未包含键-值映射关系,则返回 true。 |
Set[K](https://www.yuque.com/java/util/Map.html) | keySet)() 返回此映射中包含的键的 Set 视图。 |
V | put)(K key, V value) 将指定的值与此映射中的指定键关联(可选操作)。 |
void | putAll)(Map<? extends K,? extends V> m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。 |
V | remove)(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。 |
int | size)() 返回此映射中的键-值映射关系数。 |
Collection[V](https://www.yuque.com/java/util/Map.html) | values)() 返回此映射中包含的值的 Collection 视图。 |
2.1 HashMap:
在Map集合中插入 删除定位元素使用HashMap是最好的选择,不能保证元素存储顺序
2.2 TreeMap:
如果按照自然顺序或自定义顺序去遍历键,使用TreeMap是最好的选择。
3.Iterator集合框架(接口):
提供接口方法以迭代的方法逐个访问集中的各个元素
方法:
boolean hashNext() 判断是否存在另一个可访问的元素
Object next() 返回下一个要访问的元素,如果到达集合末尾就会抛出异常
void remove() 删除上一次访问返回的对象 注意:使用该方法删除 会对底层集合产生影响因此 不推荐此方法删除
4.Map集合的遍历
根据keySet() <br /> <br />
/**
* Map集合遍历
*/
public class MapEach {
public static void main(String[] args) {
//实例化Map集合
Map<String,Book> books = new HashMap<>();
//添加元素
books.put( "b1" , new Book("《Java从入门到放弃》","刘备",99.8) );
books.put( "b2" , new Book("《MySQL从删库到跑路》","关羽",19.8) );
books.put( "b3" , new Book("《JavaScript从入门到放弃》","刘备",20.8) );
System.out.println("-----------------------entrySet()---------------------");
Set< Map.Entry<String, Book> > entrySet = books.entrySet();
for( Map.Entry<String, Book> entry : entrySet ){
System.out.println( entry.getKey() + "-"+ entry.getValue().name );
}
}
}
根据entrySet():<br /> <br />
public class MapEach {
public static void main(String[] args) {
//实例化Map集合
Map<String,Book> books = new HashMap<>();
//添加元素
books.put( "b1" , new Book("《Java从入门到放弃》","刘备",99.8) );
books.put( "b2" , new Book("《MySQL从删库到跑路》","关羽",19.8) );
books.put( "b3" , new Book("《JavaScript从入门到放弃》","刘备",20.8) );
System.out.println("-----------------------values()------------------------");
Collection<Book> values = books.values();
for ( Book book :values){
System.out.println(book.name);
}
}
}
5.迭代器遍历循环
public class HashMAp {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("dml",10);
map.put("dml1",10);
map.put("dml2",10);
map.put("dml3",20);
map.put("dml4",10);
map.put("dml5",10);
Set<String> set = map.keySet();
//获取迭代器
Iterator<String> i = set.iterator();
//keySet()方式获取键
while (i.hasNext()){
String key = i.next();
System.out.println(key+"\t");
System.out.println(map.get(key));
}
Map<String,Double> tree = new TreeMap<>();
tree.put("d1",20.0);
tree.put("d2",20.0);
tree.put("d3",30.0);
tree.put("d4",20.0);
tree.put("d5",20.0);
Set<Map.Entry<String, Double>> set1 = tree.entrySet();
Iterator<Map.Entry<String, Double>> i1 = set1.iterator();
//entrySet()方式获取键值对
while(i1.hasNext()){
Map.Entry en = (Map.Entry)i1.next();
System.out.println(en);
}
}
}