集合学习总结

一.集合

1.collection集合

collection本身是一个接口,不能实例化,只能通过自实现类实例化
先说一说集合和数组的区别:
1)长度的区别
数组:长度是固定的
集合: 长度是可变的
2)内容的区别
数组:只能存储同一种类型的元素 int[] arr = new int[3] ;
集合:他可以存储任意类型的元素
3)存储数据类型的问题
数组:既可以存储基本数据类型,又可以存储引用数据类型 … String[] Student[]
集合: 只能存储引用数据类型

1.1collection集合的基本功能

  • boolean add(Object e):添加任意类型的元素
  • boolean remove(Object o):删除指定的元素
  • void clear() : 暴力删除(删除集合中的所有元素)
  • boolean contains(Object o) :是否包含指定的元素,如果包含,返回true
  • boolean isEmpty():判断集合是否为空
  • Iterator iterator():获取集合的迭代器(集合专用遍历方式)(单独讲)
  • Object[] toArray():将集合转换成对象数组(单独讲)
  • int size():获取集合的元素数
  • boolean retainAll(Collection c):一个集合对另一个集合取交集

1.2collection集合基本功能的代码示例

package com.qianfeng;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo {
	
	public static void main(String[] args) {
		Collection c = new ArrayList() ;
		//添加元素
		c.add("1");
		c2.add("1");
		c.add("2");
		c2.add("2");
		c.add("3");
		c2.add("3");
		c.add(4);
		c.add('a');
		c.add("爱java,爱生活");
		c2.add("爱java,爱生活");
		
		System.out.println(c);
		
		c.remove(4);//删除元素4
		c.remove('a');//删除字符'a'
		
		System.out.println(c);
		
		System.out.println("size():" + c.size());//元素数
		
		System.out.println("isEmpty:" + c.isEmpty());//判断是否为空
		
		System.out.println("contains:" + c.contains("2"));//判断是否包含这个元素
		
		c.clear();//暴力删除所有元素
		
		System.out.println(c);
		System.out.println("c2.retainAll(c)" + c2.retainAll(c));
		//如果一个集合A对一个集合B取交集,交集的元素保存在A集合中,B集合不变的
 		//返回值boolean表达的意思A集合中的元素,是否发生变化,如果没有发生变化,
		//返回false;如果变化,返回true
		
		
	}

}

输出结果:

[1, 2, 3, 4, a, 爱java,爱生活]
[1, 2, 3, 爱java,爱生活]
size():4
isEmpty:false
contains:true
[]
true

1.3collection集合的遍历方式

package com.qianfeng;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import org.omg.PortableInterceptor.Interceptor;

public class CollectionDemo {

	public static void main(String[] args) {
		Collection c = new ArrayList();
		// 添加元素
		c.add("我");
		c.add("爱");
		c.add("学");
		c.add("Java");
		System.out.println(c);

		// 方法一:将集合转换成Object数组
		Object[] obj = c.toArray();

		for (int i = 0; i < obj.length; i++) {
			String s = (String) obj[i];// 进行强转
			System.out.println(s + "---" + s.length());// 输出元素s和所对应的长度
		}

		System.out.println("-----------------------------");
		
		// 方法二:collection迭代器
		Iterator it = c.iterator();
		while (it.hasNext()) {// 判断是否有下个元素
			String s = (String) it.next();
			System.out.println(s + "---" + s.length());
		}
		
	}

}

输出结果

[,,, Java]---1---1---1
Java---4
--------------------------------1---1---1
Java---4

2.List集合

2.1List集合的三个子实现类的特点?

  • ArrayList
    底层数据结构:数组----->查询快,增删慢
    从线程角度考虑:此实现不是同步的---->线程不安全---->执行效率高!
  • LinkedList:
    底层数据结构:链接列表(链表)---->查询慢,增删快
    从线程角度考虑:此实现不是同步的----->线程不安全---->执行效率高!
  • Vector:
    底层数据库结构:可增长的数组实现---->查询快.增删慢
    线程方面: 线程安全—>同步----->执行效率低!

如果一些需求中:没有指定具体的集合---->都去使用ArrayList (除 多线程环境外)

2.2ArrayList集合

package com.qianfeng_01;

import java.util.ArrayList;
import java.util.List;

/*
 * List的集合的特有功能:
 * 		void add(int index,Object element):在指定的位置处添加元素
		Object remove(int index):删除指定索引处的元素
		Object get(int index):获取功能: 获取指定索引处的元素
					结合size():获取集合元素   普通for循环(第三种遍历方式)
					
					遍历元素:
							1)迭代器
							2)普通for循环:get(int index) 和 size()相结合
							3)增强for循环(替代迭代器的)
		
		
		Object set(int index,E element):在指定位置处,修改元素内容
		
		ListIterator listIterator(): list集合的专有遍历方式:列表迭代器
 * 
 * */
public class ListDemo2 {
	public static void main(String[] args) {
		
		//创建List集合对象
		List list = new ArrayList() ;
		
		//添加元素
		list.add("hello") ;
		list.add("world") ;
		list.add("Java") ;
		list.add("JavaEE") ;
		
		//void add(int index,Object element):在指定的位置处添加元素
		list.add(2, "android");
		
		//Object remove(int index):删除指定索引处的
		//元素 :返回被删除的元素
		System.out.println(list.remove(2)) ;
		
		System.out.println("get():"+list.get(3));
		
		//Object set(int index,Object element):在指定位置处,修改元素内容
		System.out.println("set():"+list.set(3, "go"));
		System.out.println("list:"+list);
	}
}

运行结果:

android
get():JavaEE
set():JavaEE
list:[hello, world, Java, go]

2.3ArrayList集合的遍历

package com.qianfeng_arraylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;


public class ArrayListDemo {
	
	public static void main(String[] args) {
		
		//创建ArrayList集合对象
		ArrayList array = new ArrayList() ;
		
		//给集合中添加元素
		array.add("hello") ;
		array.add("hello") ;
		array.add("world") ;
		array.add("world") ;
		array.add("java") ;
		array.add("java") ;
		
		//方式一:转换成Object数组
		Object[] objs = array.toArray() ;
		for(int x = 0 ; x < objs.length ; x ++) {
			String s = (String)(objs[x]) ;
			System.out.println(s+"---"+s.length());
		}
		System.out.println("-----------------------");
		
		//方式二:使用Collection的迭代器
		Iterator it = array.iterator() ;
		while(it.hasNext()) {
			String s = (String)(it.next()) ;
			System.out.println(s+"---"+s.length());
		}
		
		System.out.println("-----------------------");
		//方式3:使用List集合的列表迭代器
		ListIterator lit = array.listIterator() ;
		while(lit.hasNext()) {
			String s = (String)(lit.next()) ;
			System.out.println(s+"---"+s.length());
		}
		System.out.println("-----------------------");
		
		//方式4:
		//Object get(int index) 和int size()方法相集合:普通for循环...
		for (int i = 0; i < array.size(); i++) {
			String s = (String)(array.get(i)) ;
			System.out.println(s+"---"+s.length());
		}
	}
}

2.4LinkedList集合

package com.qianfeng.linkedlist_01;

import java.util.LinkedList;

/*
 * LinkedList:
 * 		此类的底层数据结构是链接列表,查询慢,增删快
 * 		线程不安全---不同步---执行效率高
 * 
 * 
 * 特有功能:
 *  添加
 * 		public void addFirst(Object e):将指定元素始终在链表开头添加
 * 		public void addLast(Object e):将指定的元素在链表的末尾添加
 *  获取
		public Object getFirst() :获取链表的第一个元素
		public Object getLast()  :获取链表的最后一个元素
	删除	
		public Object removeFirst():删除链表第一个元素
		public Object removeLast() :删除链表最后一个元素
 * */
public class LinkedListDemo {
	
	public static void main(String[] args) {
		
		//创建一个LinkeList集合对象
		LinkedList link = new LinkedList() ;
		
		//public void addFirst(Object e)
		link.add("hello") ;
		link.add("world") ;
		link.add("java") ;
		
		link.addFirst("javaee");
		link.addFirst("android");
//		public void addLast(Object e)
		link.addLast("go");
		link.addLast("R");
		
		//public Object getFirst() :获取链表的第一个元素,返回被获取的元素
		System.out.println("getFirst():"+link.getFirst());
		//public Object getLast()  :获取链表的最后一个元素
		System.out.println("getLast():"+link.getLast());
		
		//public Object removeFirst():删除链表第一个元素
		System.out.println("removeFirst():"+link.removeFirst());
		//public Object removeLast() :删除链表最后一个元素
		System.out.println("removeLast():"+link.removeLast());
		
		System.out.println("link:"+link);
	}
}

运行结果:

getFirst():android
getLast():R
removeFirst():android
removeLast():R
link:[javaee, hello, world, java, go]

2.5Vector集合

package com.qianfeng.vector_01;

import java.util.Enumeration;
import java.util.Vector;

/*
 * Vector集合:通过整数索引访问组件!
 * 		
 * 		底层数据结构是一个数组,查询快,增删慢
 * 		线程安全的类---同步--->执行效率低
 * 
 * 
 * 线程安全的类:
 * 		StringBuffer
 * 		Vector
 * 
 * 	public void addElement(Object obj):给Vector集合中添加元素	------->类似于add(Object obj)
	public Object elementAt(int index):通过整数索引值获取指定元素内容---->类似于Object get(int index)
	public Enumeration elements() :就是Vector集合的专有遍历方式:返回Enumeration接口(枚举元素)----->类似于:Iterator iterator()
	
			Enumeration接口:
					boolean hasMoreElements():判断枚举中是否存在元素
					Object nextElement():获取下一个枚举元素
 * 
 * 
 * */
public class VectorDemo {
	
	public static void main(String[] args) {
		
		//创建Vector集合对象
		Vector v = new Vector() ;
		
		//	public void addElement(Object obj):
		v.add("hello") ;
		v.add("world") ;
		v.add("java") ;
		v.add("JavaEE") ;
		//System.out.println(v);
		
		//public Object elementAt(int index): +size()遍历Vector集合
		for(int x = 0 ; x < v.size() ; x ++) {
			//System.out.println(v.elementAt(x));
			String s = (String)(v.elementAt(x)) ;
			System.out.println(s+"---"+s.length());
		}
		System.out.println("---------------------------");
		//public Enumeration elements()  :Vector集合的特有遍历方式
		Enumeration em = v.elements() ;
		/*
		 * boolean hasMoreElements():判断枚举中是否存在元素
					Object nextElement():获取下一个枚举元素
		 * */
		while(em.hasMoreElements()) {
			String s = (String)(em.nextElement()) ;
			System.out.println(s+"---"+s.length());
		}
	}
}

hello---5
world---5
java---4
JavaEE---6
---------------------------
hello---5
world---5
java---4
JavaEE---6

3.Set集合

package com.qianfeng.set_01;

import java.util.HashSet;
import java.util.Set;

/*
 * Set集合和List集合的区别:
 * 	List集合:有序的集合,存储和取出是一致的!它允许元素重复
 * 	Set集合:无序的集合,存储和取出不一致(不能保证该顺序恒久不变),它元素唯一的!
 * 
 * */
public class SetDemo {
	
	public static void main(String[] args) {
		
		//创建一个Set集合对象
		Set<String> set = new HashSet<String>() ;
		
		//添加元素
		set.add("hello") ;
		set.add("hello") ;
		set.add("world") ;
		set.add("world") ;
		set.add("hello") ;
		set.add("java") ;
		set.add("java") ;
		
		
		//遍历:增强for
		for(String s: set) {
			System.out.println(s);
		}
	}
}

运行结果

world
java
hello

3.1.TreeSet集合

特点:有序的,不重复的元素集合

package com.qianfeng.treeset_01;

import java.util.TreeSet;

/*
 * 
 * TreeSet集合:是基于TreeMap集合的实现---->红黑树结构
 * 
 * 提供两种排序方式:自然排序/选择器排序  根据构造方法来确定
 * 
 * Set接口:
 * 构造方法:
 * 	TreeSet():创建TreeSet集合对象使用自然排序
 * 	TreeSet(Comparator<? super E> comparator):创建一个TreeSet集合对象,使用选择器排序
 * 
 * */
public class TreeSetDemo {
	
	public static void main(String[] args) {
		
		//创建TreeSet集合对象
		TreeSet<Integer> ts = new TreeSet<Integer>() ;  //为什么能够实现自然排序
		//20,18,23,22,17,24,19,18,24
		ts.add(20) ; //add()添加---->TreeMap<K,V>的put有关系
		ts.add(18) ;
		ts.add(23) ;
		ts.add(22) ;
		ts.add(17) ;
		ts.add(24) ;
		ts.add(19) ;
		ts.add(18) ;
		ts.add(24) ;
		
		//遍历集合
		for(Integer i : ts) {
			System.out.print(i+" ");//17 18 19 20 22 23 24 
		}
	}
}

运行结果:

17 18 19 20 22 23 24 

4.Map集合

4.1Map集合的特点

Map集合
数据结构<K,V> 键值对
K Integer V String
1 张三
2 李四
3 王五
2 赵六
Map<K,V>集合:能够存储一些键值对的集合!
特点:
针对键有效,跟值无关 ,
键唯一的,值是可以重复的

4.2Map集合的基本功能

基本功能:
V put(K key,V value) :添加一个键值对元素
V remove(Object key) :删除键,返回键对应的值
void clear() :暴力删除(删除全部键值对元素)
boolean containsKey(Object key):判断是否包含指定的键
boolean containsValue(Object value):判断是否包含指定的值
boolean isEmpty() :判断Map集合是否为空
int size(): :获取集合的元素数

4.3代码演示

package com.qianfeng.map_01;

import java.util.HashMap;
import java.util.Map;
public class MapDemo {
	
	public static void main(String[] args) {
		
		//创建Map集合对象
		Map<String,String> map = new HashMap<String,String>() ;
		System.out.println("put:"+map.put("高圆圆", "赵又廷")) ; 
		//put的返回值:如果键是第一次添加,返回null
		map.put("刘恺威", "杨幂") ;
		map.put("周杰伦", "蔡依林") ;
		map.put("杨过", "小龙女") ;
	System.out.println("containsValue():"+map.containsValue("小龙女"));
		//boolean isEmpty()    :判断Map集合是否为空
		System.out.println("isEmpty():"+map.isEmpty());
		System.out.println(map.size());
		System.out.println(map);
	}
}

运行结果:

put:null
containsValue():true
isEmpty():false
4
{杨过=小龙女, 周杰伦=蔡依林, 高圆圆=赵又廷, 刘恺威=杨幂}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值