集合:存储对象的容器
集合的出现就是为了持有对象。集合中可以存储任意类型的对象, 而且长度可变。
集合和数组的区别:
数组和集合类都是容器
数组长度是固定的,集合长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象,
数组中存储数据类型是单一的,集合中可以存储任意类型的对象。
集合框架:
什么时候该使用什么样的集合:
Iterable:Collection的父接口. 实现了Iterable的类就是可迭代的
迭代器:
为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)
如何获取迭代器?
Collection接口中定义了获取集合类迭代器的方法(iterator())。
//迭代器遍历:(while) public static void main(String[] args) { ArrayList list = new ArrayList(); // 增加:add() 将指定对象存储到容器中 list.add("计算机网络"); list.add("现代操作系统"); list.add("java编程思想"); list.add("java核心技术"); list.add("java语言程序设计"); System.out.println(list); Iterator it = list.iterator(); while (it.hasNext()) { String next = (String) it.next(); System.out.println(next); } }
//for循环 import java.util.ArrayList; import java.util.Iterator; public class Demo2 { public static void main(String[] args) { ArrayList list = new ArrayList(); // 增加:add() 将指定对象存储到容器中 list.add("计算机网络"); list.add("现代操作系统"); list.add("java编程思想"); list.add("java核心技术"); list.add("java语言程序设计"); System.out.println(list); for (Iterator it = list.iterator(); it.hasNext();) { //迭代器的next方法返回值类型是Object,所以要记得类型转换。 String next = (String) it.next(); System.out.println(next); } } }
Map:
Map中的元素是两个对象,一个对象作为键,一个对象作为值。键不可以重复,但是值可以重复。
Map与Collection在集合框架中属并列存在
Map存储的是键值对
Map存储元素使用put方法,Collection使用add方法
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
Map集合中键要保证唯一性
Collections与Arrays
(Collections)集合框架中的工具类,特点:该工具类中的方法都是静态的。
Collections:常见方法:
1, 对list进行二分查找:
前提该集合一定要有序。
int binarySearch(list,key);
//必须根据元素自然顺序对列表进行升级排序
//要求list 集合中的元素都是Comparable 的子类。
int binarySearch(list,key,Comparator);
2,对list集合进行排序。
sort(list);
//对list进行排序,其实使用的事list容器中的对象的compareTo方法
sort(list,comaprator);
//按照指定比较器进行排序
3,对集合取最大值或者最小值。
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)
4,对list集合进行反转。
reverse(list);
5,对比较方式进行强行逆转。
Comparator reverseOrder();
Comparator reverseOrder(Comparator);
6,对list集合中的元素进行位置的置换。
swap(list,x,y);
7,对list集合进行元素的替换。如果被替换的元素不存在,那么原集合不变。
replaceAll(list,old,new);
8,可以将不同步的集合变成同步的集合。
Set synchronizedSet(Set<T> s)
Map synchronizedMap(Map<K,V> m)
List synchronizedList(List<T> list)
9. 如果想要将集合变数组:
可以使用Collection 中的toArray 方法。注意:是Collection不是Collections工具类
传入指定的类型数组即可,该数组的长度最好为集合的size。
Arrays:用于对数组操作的工具类
1,二分查找,数组需要有序
binarySearch(int[])
binarySearch(double[])
2,数组排序
sort(int[])
sort(char[])……
1, 将数组变成字符串。
toString(int[])
2, 复制数组。
copyOf();
3, 复制部分数组。
copyOfRange():
4, 比较两个数组是否相同。
equals(int[],int[]);
5, 将数组变成集合。
List asList(T[]);
这样可以通过集合的操作来操作数组中元素,
但是不可以使用增删方法,add,remove。因为数组长度是固定的,会出现
UnsupportOperationExcetion。
可以使用的方法:contains,indexOf。。。
如果数组中存入的基本数据类型,那么asList会将数组实体作为集合中的元素。
如果数组中的存入的引用数据类型,那么asList会将数组中的元素作为集合中
的元素。
泛型:
集合类<类类型> 变量名 = new 集合类<类类型>();
public class Demo5 { public static void main(String[] args) { // 使用泛型后,规定该集合只能放羊,老虎就进不来了. ArrayList<Sheep> arr = new ArrayList<Sheep>(); arr.add(new Sheep("美羊羊")); arr.add(new Sheep("懒洋洋")); arr.add(new Sheep("喜羊羊")); // 编译失败 // arr.add(new Tiger("东北虎")); System.out.println(arr); Iterator<Sheep> it = arr.iterator(); while (it.hasNext()) { // 使用泛型后,不需要强制类型转换了 Sheep next = it.next(); next.eat(); } } } class Tiger { String name; public Tiger() { } public Tiger(String name) { this.name = name; } @Override public String toString() { return "Tiger@name:" + this.name; } public void eat() { System.out.println(this.name + "吃羊"); } } class Sheep { String name; public Sheep() { } public Sheep(String name) { this.name = name; } @Override public String toString() { return "Sheep@name:" + this.name; } public void eat() { System.out.println(this.name + "吃青草"); } }
什么时候使用泛型:当类中操作的引用数据类型不确定的时候,就可以使用泛型类.