
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
listStr= new ArayList (); listStr.add("数据1"); //编译通过
listStr.add(2); //编译错误
2.声明数组长度固定,不会再改变。而创建集合不需要声明长度,并且长度可变
ListArrayList
Listarraylsit = new ArrayList (); //声明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 sublist = arraylist.subList(1,2); //截取子集 //对集合汉字排序 Collection.sort(arraylist,new Comparator (){ 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
queuelinkedlist = new linkedList (); //声明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
dequelinkedlist = new linkedList (); //声明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做插入,删除数据时,因为是双向连表,首未数据都可以进行 *** 作,效率会比单链高。
SetIterator迭代器接口声明了如下方法:
hasNext():判断集合中元素是否遍历完毕,如果没有,就返回true
next():返回下一个元素
remove():从集合中删除上一个有next()方法返回的元素。
Set(集合):Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
Set
sethashset = new HshSet (); //声明集合
sethashset.add("121");
sethashset.add("122");
sethashset.add("123");
sethashset.add("122");System.out.println(sethashset);
Set集合是无序且唯一的,如果存在同样的数据,会有去重效果
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素。
MapMap
maphashmap = new HashMap (); //声明集合
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> iterator = maphashmap.entrySet().iterator();
while(iterator.hasNext()){
System.out.println(iterator.next()); //通过迭代器查看集合
}
----------------------------------------------------------
maphashmap.clear(); //清空集合
//声明集合
Map 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> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
System.out.println("one-----" + iterator.next() + " ");
}
//通过Map.entrySet遍历key,value在foreach中使用entry遍历
for (Map.Entry 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;
public class Collection_Array {
public static void main(String[] args){
//声明数组
String[] str = {"啊红","啊黄","啊紫","啊绿",
"啊粉","啊青","啊哈"};
//转为集合
List list = Arrays.asList(str);
System.out.println(list);
//对数组转换的集合 *** 作就是对原数组的 *** 作
//增删元素是不支持的 *** 作 会导致原数组扩容或缩容
//支持替换元素
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[] 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);
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)