List接口集合继承于Collection接口。存储值不唯一(允许重复),有序(以元素的插入次序来放置元素,不会重新排列)。
Set接口继承于Collection接口,存储值唯一(不允许重复),无序。
Map接口存储一组成对的键-值。提供key-value的映射,map中key不要求有序,不允许重复,value值同样不要求有序,但允许重复。
数组集合区别
1.数组必须声明存放数据的类型,而集合可以存放多种数据类型(填写泛型后只能写一种类型)
int[] aa = {1,2,4,5};
List list = new ArrayList();
list.add(1);
list.add("asd");
list.add(true);List<String> listStr= new ArayList<String>();
listStr.add("数据1"); //编译通过
listStr.add(2); //编译错误
2.声明数组长度固定,不会再改变。而创建集合不需要声明长度,并且长度可变
List
ArrayList
List<String> arraylsit = new ArrayList<String>(); //声明ArrayList集合
arraylist.add("你好");
arraylist.add("我的");
arraylist.add("boo");
System.out.println(arraylist); //[你好,我的,boo]
arraylist.add(2,"好");
System.out.println(arraylist); //[你好,我的,好,boo]
arraylist.set(3,"大boo"); //[你好,我的,好,大boo]
Boolean boo = arraylist.contains("大二"); //查看是否存在“大二”
System.out.println(boo); //存在返回true 不存在返回false
List<String> sublist = arraylist.subList(1,2); //截取子集
//对集合汉字排序
Collection.sort(arraylist,new Comparator<String>(){
public int compare(String o1, String o2){
return o1.length()-o2.length(); // 对集合汉字排序
}
});
-------------------------------------------------------------
Collections.sort(arrl); //对集合数字排序
Collections.shuffle(arrl); //乱序
sublist.remove(1); //删除集合,对截取的子集也有影响
arraylist.clear(); //清空集合
ArrayList扩容步骤
1.在内存中创建一个新的数组。
2.将原数组的数据复制到新数组中。
3.系统会将原数组回收。
需要注意的是,每次将扩容1.5倍,太大造成资源浪费,太小服务器品方创建回收,服务器压力大。
ArrayList做插入,删除数据时,底层用到的都是数组,也就是数组的扩容缩容,会降低运行效率。
Queue-LinkedList(单向队列)
Queue<String> queuelinkedlist = new LinkedList<String>(); //声明Queue LinkedList 集合
queuelinkedlist.offer("数据1"); //添加元素
queuelinkedlist.offer("数据2");
queuelinkedlist.offer("数据3");queuelinkedlist.offer("数据4");
queuelinkedlist.offer("数据5");
String str = queuelinkedlist.peek(); //引用首个元素 数据1
queuelinkedlist.poll(); //删除首个元素
String str = queuelinkedlist.peek(); //引用首个元素 数据2queuelinkedlist.remove(2);//删除指定元素
Queue-LinkedList做插入,删除数据时,因为是单链,只能单进单出,拿到指定的数据效率会非常慢。
Deque_LinkedList(双向队列)
Deque<String> dequelinkedlist = new LinkedList<String>(); //声明Deque LinkedList集合
dequelinkedlist.offer("数据1"); //添加元素
dequelinkedlist.offerLast("数据2");//集合末尾添加元素
dequelinkedlist.offerFirst("数据3");//集合最前位置添加
dequelinkedlist.offer("数据4"); //集合最前位置添加
dequelinkedlist.poll(); //删除首元素
dequelinkedlist.pollLast(); //删除末尾元素
String sstr = dequelinkedlist.peek(); //引用首元素
String lstr = dequelinkedlist.peekLast();//引用末尾元素
Deque-LinkedList做插入,删除数据时,因为是双向连表,首未数据都可以进行操作,效率会比单链高。
Iterator迭代器接口声明了如下方法:
hasNext():判断集合中元素是否遍历完毕,如果没有,就返回true
next():返回下一个元素
remove():从集合中删除上一个有next()方法返回的元素。
Set(集合):Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
Set
Set<String> sethashset = new HshSet<String>(); //声明集合
sethashset.add("121");
sethashset.add("122");
sethashset.add("123");
sethashset.add("122");System.out.println(sethashset);
Set集合是无序且唯一的,如果存在同样的数据,会有去重效果
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素。
Map
Map<Integer,String> maphashmap = new HashMap<Integer,String>(); //声明集合
maphashmap.put(1,"数据q"); //添加元素
maphashmap.put(2,"数据2");
maphashmap.put(3,"数据3");
String str = maphashmap.get(3); //通过key获取value
maphashmap.remove(1); //通过key删除value
Boolean boo = maphashmap.isEmpty(); //检查是否为空
---------------------------------------------------------
Iterator<Entry<Integer,String>> iterator = maphashmap.entrySet().iterator();
while(iterator.hasNext()){
System.out.println(iterator.next()); //通过迭代器查看集合
}
----------------------------------------------------------
maphashmap.clear(); //清空集合
//声明集合
Map<Integer, String> map = new HashMap<>();
//添加元素
map.put(2, "one");
map.put(1, "one2");
map.put(5, "one3");
map.put(4, "one4");
map.put(3, "one5");
//1.迭代器
Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
System.out.println("one-----" + iterator.next() + " ");
}
//通过Map.entrySet遍历key,value在foreach中使用entry遍历
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("two-----" + entry.getKey() + entry.getValue() + " ");
}
//通过Map.keySet遍历key,
for (Integer key : map.keySet()) {
String value = map.get(key);
System.out.println("three-----" + key + value);
}
//
for (Integer key : map.keySet()) {
System.out.println("four-----" + key);
}
for (String value : map.values()) {
System.out.println("four-----" + value);
}
集合与数据之间的转换
import java.util.Arrays;
import java.util.List;
/**
*
* @author ljf
*集合于数组之间的转换
*
*/
public class Collection_Array {
public static void main(String[] args){
//声明数组
String[] str = {"啊红","啊黄","啊紫","啊绿",
"啊粉","啊青","啊哈"};
//转为集合
List<String> list = Arrays.asList(str);
System.out.println(list);
//对数组转换的集合操作就是对原数组的操作
//增删元素是不支持的操作 会导致原数组扩容或缩容
/*运行会报错
扩容了
list.add("yes");
缩容了
list.remove(1);
*/
//支持替换元素
list.set(5, "天子笑,");
System.out.println(list);
//将集合转为数组
String[] str1 = (String[]) list.toArray();
//遍历数组
for (int i = 0; i < str1.length; i++) {
System.out.print(str1[i]+" ");
}
/*
* 如果是int类型转换为集合
* aslist()方法的参数必须是对象
* 应先把int[]转化为Integer
*/
int[] num={3,5,7,9};
//遍历数组
System.out.println();
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]+" ");
}
Integer[] arraynum = new Integer[num.length];
for (int i = 0; i < num.length; i++) {
arraynum[i] = num[i];
}
List list1 = Arrays.asList(arraynum);
System.out.println();
System.out.println(list1);
}
}