前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 类集初探

Java 类集初探

作者头像
Mirror王宇阳
发布于 2020-11-10 15:08:52
发布于 2020-11-10 15:08:52
59200
代码可运行
举报
运行总次数:0
代码可运行

类集

  • 类集:主要功能就是Java数据结构的实现(java.util)
  • 类集就是动态对象数组(链表也是动态数组)

Collection 接口*

  • Collection是整个类集之中单值保存的最大 父接口 。即:每一次仅可以向集合中保存一个对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Collection<E>
extends Iterable<E>
  • 在Collection定义的常用操作方法

常用操作方法

  • 向集合中保存数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public  boolean add(E e);
  • 追加一个集合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean addAll(Collection<? extends E>c);
  • 清空集合(根元素为null)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void clear();
  • 判断是否有指定的内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean contains(Object o);
  • 判断是否为空集合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean isEmpty();
  • 删除对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean remove(Object o);
  • 取得元素个数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int size();
  • 以对象数组保存集合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Object [] toArray();
  • 为Iterator接口实例化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Iterator<E> iterator();

contains() 和 remove() 一定要依靠 equals() 的支持;

List子接口

  • List子接口是Collection接口中最常用的子接口;
  • List对Collection接口进行了功能的扩充;

常用操作

  • 取得索引编号的内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public E get(int index);
  • 修改索引的内容
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public E set(int index , E element);
  • 为LisIterator接口实例化对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ListIterator<E> listIterator();

List属于接口,如果想使用接口进行操作,就必须存在子类;使用 ArrayList 子类实现(和Vector子类)

ArrayList子类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	public static void main(String [] args) throws IOException {
		List<String> all = new ArrayList<String>();
		System.out.println("size:" + all.size() + "Null:" + all.isEmpty());
		all.add("Hello");
		all.add("Hello");
		all.add("World");
		System.out.println("size:" + all.size() + "Null:" + all.isEmpty());
		// Collection接口定义了size()方法取得集合长度
		// List子接口增加了 get() 方法,可取取得所有的数据
		for (int x = 0 ; x < all.size() ; x++) {
			String str = all.get(x);
			System.out.println(str);
		}
	}
}

通过对ArrayList()子类的使用分析在:List集合中所保存的数据是按照保存的顺序存放的,而且允许重复数据;List子接口有get()方法,可以获得集合中指定序列的内容

  • 为Collection接口实例化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) throws IOException {
		Collection<String> all = new ArrayList<String>();
		System.out.println("size:" + all.size() + "Null:" + all.isEmpty());
		all.add("Hello");
		all.add("Hello");
		all.add("World");
		System.out.println("size:" + all.size() + "Null:" + all.isEmpty());
		Object[] obj = all.toArray();//变为对象数组读取数据
		for (int x = 0 ; x < obj.length ; x ++) {
			System.out.println(obj[x].toString());
		}
		/*for (int x = 0 ; x < all.size() ; x++) {
			String str = all.get(x);// 由于Collection类中没有get()方法所以无法使用
			System.out.println(str);
		}*/
	}
}
  • List保存对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Book {
	private String title ; 
	private double price ;
	public Book(String title , double price) {
		this.price = price;
		this.title = title;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true ; 
		}
		if (obj == null) {
			return false;
		}
		if(!(obj instanceof Book)) {
			return false ; 
		}
		Book book = (Book) obj;
		if (this.title.equals(book.title) && this.price == book.price){
			return true;
		}
		return false;
	}
	@Override
	public String toString() {
		return this.title + "\t" + this.price + "\n";
	}
}

public class TestDemo {
	public static void main(String [] args) {
		List<Book> all = new ArrayList<Book>();
		all.add(new Book("Java",11.1));
		all.add(new Book("python",22.2));
		all.add(new Book("C/C++",33.3));
		all.add(new Book("PHP",44.4));
		// 切记:remove和contains方法需要在类中覆写equls()类
		all.remove(new Book("PHP",44.4));
		System.out.println(all);
	}
}

Vector子类(旧)

  • 区别: Vector子类采用同步处理,线程安全;而ArrayList子类则采用非线程安全的异步处理机制。ArrayList支持Iterator、ListIterator、foreach输出,而Vector还支持Enumeration。

总结:

  • List中的数据保存顺序就是数据的添加顺序
  • List集合中允许保存有重复的元素
  • List子接口比Collection扩充了get()、set()方法
  • List大多使用ArrayList子类进行操作

Set 子接口

Set子接口只是简单点额继承了Collection接口,并没有效仿List接口对原接口的功能方法进行扩充。

  • 常见子类:HashSet、TreeSet
  • 观察 HashSet 子类:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Set<String> all = new HashSet<String>();
		all.add("Hello");
		all.add("Hello");//不保存重复的数据
		all.add("World");
		all.add("HUAWEI");
		System.out.println(all + ">>>" + all.size());
	}
}

通过观察发现:Set集合下没有重复的数据元素(Set 子接口的特征)即:HashSet 子类特征属于 无序排列

  • 观察 TreeSet子类:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Set<String> all = new TreeSet<String>();
		all.add("Hello");
		all.add("Hello");//不保存重复的数据
		all.add("World");
		all.add("Array");
		System.out.println(all + ">>>" + all.size());
	}
}

分析得出:TreeSet子类没有重复数据,以及所保存的内容默认自动升序排序。

数据排序问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Book implements Comparable<Book>{
	private String title ; 
	private double price ; 
	public Book(String title , double price) {
		this.title = title;
		this.price = price;
	}
	@Override
	public String toString() {
		return this.title + "\t" + this.price;
	}
	/*
	 * 集合本质上就是动态对象数组,而动态的对象数组排序使用的是比较器
	 * 所以我们使用comparable比较器
	 * 
	 * 由于存在重复的元素,compareTo会认为是同一个对象,(Set子接口的特性)
	 * 所以 set子接口的重复判读就是依靠Comparable
	 * 为此我们可以使用String的compareTo方法进行同对象的比较
	 */
	@Override
	public int compareTo(Book o) {
		if (this.price > o.price) {
			return 1;	
		} else if(this.price < o.price) {
			return -1;
		} else {
			// 我们调用String类的compareTo方法来比较
			return this.title.compareTo(o.title);
		}
	}
}

public class TestDemo {
	public static void main(String [] args) {
		Set<Book> all = new TreeSet<Book>();
		all.add(new Book("Java",11.1));
		all.add(new Book("Java",11.1));		//信息完全重复
		all.add(new Book("php",11.1));		//信息部分重复
		all.add(new Book("Python",33.3));	//信息完全不重复
		System.out.println(all);
	}
}

通过观察发现,Comparable接口支持了TreeSet类的重复数据的判断,并不支持对HashSet类的重复数据的判读

重复元素问题

通过上述的各段代码发现:Comparable接口(比较器)只负责对TreeSet子类的重复元素的判断;(依靠comparTo()方法,如若发现数据相同则判断为是同样的对象元素,则 return 0;)

如果要判断数据元素的重复,只能依靠Object中的方法:

  • 取得哈希码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public int hashCode();
  • 对象比较
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean equals(Object obj);

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		long temp;
		temp = Double.doubleToLongBits(price);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + ((title == null) ? 0 : title.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
			return false;
		if (title == null) {
			if (other.title != null)
				return false;
		} else if (!title.equals(other.title))
			return false;
		return true;
	}
  • 总结: 在不考虑排序问题情况下,判断元素是否重复,依靠Object方法中的 hashCode() 和 equals()

总结:

  • 在开发中,Set子接口不建议首选,如果使用也是首选建议HashSet类;
  • Comparable 比较器普遍应用于Java理论中

集合输出

Collection、List、Set三个接口,List接口是最有利于输出操作的(ArrayList子类),故此集合的输出:

Iterator*:迭代输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Iterator<E> {
    public boolean hasNext();
    public E next<E>();
} 

Iterator是一个接口,如若取得接口的实例化需要依靠Collection接口iterator()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Iterator<E> iterator();// java.util.Collection
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Set<String> all = new HashSet<String>();//Set子接口
		all.add("Mirror");
		all.add("wangyuyang");
		all.add("wangyuyang");
		Iterator<String> iter = all.iterator();// 实例化接口
		while (iter.hasNext()) { //判断是否为空
			String str = iter.next();// 获取元素数据
			System.out.println(str);
		}
	}
}

Set的特性会自动不保留重复数据,并无序输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		List<String> all = new ArrayList<String>();//List子接口
		all.add("Mirror");
		all.add("wangyuyang");
		all.add("wangyuyang");
		Iterator<String> iter = all.iterator();// 实例化接口
		while (iter.hasNext()) { //判断是否为空
			String str = iter.next();// 获取元素数据
			System.out.println(str);
		}
	}
}

显示添加的所有元素并原样添加的顺序输出

  • 集合的输出问题: 在遇到集合的输出问题是,完全可以直接使用Iterator接口进行输出

ListIterator:双向迭代

  • Iterator本身只具备”由前向后“的输出,而 ListLterator 子接口则支持双向迭代。
  • 判断是否有前一个元素:(逆向)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean hasPreviout();
  • 取得前一个元素:(逆向)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public E previous();
  • 实例ListIterator接口的List方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ListIterator<E> listIterator();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		List<String> all = new ArrayList<String>();//Set子接口
		all.add("A");
		all.add("B");
		all.add("C");
		System.out.println("正向迭代输出");
		ListIterator<String> iter = all.listIterator();
		while (iter.hasNext()) { //判断是否为空
			String str = iter.next();// 获取元素数据
			System.out.println(str);
		}
		System.out.println("***********");
		System.out.println("逆向迭代输出");
		while(iter.hasPrevious()) {
			System.out.println(iter.previous());
		}
	}
}

上例程序实现了双向迭代的功能;利用hasNet()方法判断是否为空,next()方法输出元素内容,实现正向迭代输出;利用ListIterator接口中的hasPrevious()和Previous()方法来实现逆向迭代输出。

  • 注意:

如果利用ListIterator接口实现逆向迭代输出,就需要先进行正向迭代输出;也就是说在实现逆向迭代输出前必须实现正向迭代输出。

Enumeration:枚举输出

Enumeration 和 Vector类同时发布的输出接口;早期的Vector类定义的集合就需要Enumeration 来输出。

  • 接口定义
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface Enumberation<E>{
    public boolean hasMoreElements(); //判断是否有下一个元素
    public E nextElement(); // 获取当前元素内容
}
  • 实例化 Enumeration接口对象,只能依靠 Vector子类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Enumeration<E> elements() // 取得Enumeration接口对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Vector<String> all = new Vector<String>();//Set子接口
		all.add("A");
		all.add("B");
		all.add("C");
		Enumeration<String> enu = all.elements();
		while(enu.hasMoreElements()) {
			System.out.println(new String(enu.nextElement()));
		}
	}
}

foreach 输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		List<String> all = new ArrayList<String>();//Set子接口
		all.add("A");
		all.add("B");
		all.add("C");
		for (String str : all) {
			System.out.println(str);
		}
	}
}

Map接口

Collection每次都会保存一个对象,而Map接口主要负责一对对象的信息。

主要操作方法

  • 向集合中保存数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public V put(K key , V value);
  • 根据Key查找Value
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public V get(Object key);
  • 将Map结合转化为Set集合
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Set<Map Entry<K,V>> entrySet();
  • 取出所有Key值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Set<K> keySet();
  • 常用子类:
    • HashMap
    • Hashtable

观察HashMap

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叁", 3);
        map.put("叁", 33);
		System.out.println(map);
	}
}

通过代码分析可以发现:HashMap实现的输出是无序的;发现的重复的Key会进行覆盖,使用新的内容key的value覆盖原来的value

  • get方法的应用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put(null, 3);
		System.out.println(map.get("壹")); //返回 1
		System.out.println(map.get("陸"));//key不存在返回 null
		System.out.println(map.get(null));// 返回 3
	}
}

通过HashMap和get()方法的代码观察发现,Map主要的目的是实现数据的信息的查找,Collection主要的目的是实现信息数据的输出。

  • 取得所有的key值:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叁", 3);
		Set<String> set = map.keySet();// 取得key
		Iterator<String> iter = set.iterator();
		while(iter.hasNext()) {
			System.out.println(iter.next());//输出全部的key
		}
	}
}

观察Hashtable

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Integer> map = new Hashtable<String, Integer>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叁", 3);
		System.out.println(map);
	}
}

通过设置key或value为Null值来比较Hashtable和HashMap两个子类之间区别:Hashtable子类不允许存在null值,而HashMap允许Key或Value中为null值。*

Iterator输出的问题(重点)

  • 涉及到集合的输出,一定要使用Iterator进行输出;而Map接口中未定义返回Iterator接口对象的方法,故此Map数据使用Iterator输出就需要将Map集合转换为Set集合。
  • 在Collection接口中,Iterator得到的是一个Collection完整的对象;而Map则不同了,但是Map.put()向集合中存一对数据的时候,会自动的封装为Map.Entry接口对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static interface Map.Entry<K,V>;//(等同于一个外部接口)
  • Map.Entry接口操作方法
    • getkey():获取Key值
    • getValue():获取Value值

在Map中保存的实际上是被Map.Entry接口包装的一个对象,Map.Entry接口的对象包装的是:Key和Value值对数据元素。

  • 如上述,Iterator如取出输出的数据实取得是一个对象(Collection接口中就是实质上取得Collection的对象),而在Map接口中,则是取出一个Map.Entry接口对象,然后在得出Key和Value。
  • 在Map定义了一种将Map集合转为Set的方法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Set<Map.Entry<K,V>> entrySet();
  • 转为Set集合后,就可以调用Iterator输出。
  • 利用Map接口EntrySet()方法将Map结合变为Set集合 ——> 利用Set结合中的iterator()方法将Set进行Iterator输出 ——> 每一次取出的Set元素都是Map.Entrty接口对象,利用此对象进行Key与Value的取出

利用Iterator实现Map接口的输出 *

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Integer> map = new Hashtable<String, Integer>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叁", 3);
		// 将Map集合变为Set结合
		Set<Map.Entry<String, Integer>> set = map.entrySet();
		// 将Set集合实例化iterator接口对象
		Iterator<Map.Entry<String, Integer>> iter = set.iterator();
		while(iter.hasNext()) {
			// 因为iter内容保存的是Map.Entry接口的对象,所以利用Map.Entry对象将Key和Value取出
			Map.Entry<String, Integer> men = iter.next();
			System.out.println(men.getKey() + "==" + men.getValue());
		}
	}
}

Map集合中的Key

使用的Map集合,Key的类型可以自定义;那么这个自定义的类型必须覆写Object类之中的hashCode() 和 equals()方法,因为只有依靠这两个方法,才可以判断是否元素重复。【首先的Key类型是String,尽量不要使用自定义的对象类型去定义key;因为String类中默认了hashCode() 和 equals()】

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Book{
	private String title ; 
	public Book(String title) {
		this.title = title;
	}
	@Override
	public String toString() {
		return this.title;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((title == null) ? 0 : title.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Book other = (Book) obj;
		if (title == null) {
			if (other.title != null)
				return false;
		} else if (!title.equals(other.title))
			return false;
		return true;
	}
	
}

public class TestDemo {
	public static void main(String [] args) {
		Map<Book,String> map = new HashMap<Book, String>();
		map.put(new Book("java"),new String ("开发"));
		System.out.println(map.get(new Book("java")));
	}
}

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Book> map = new HashMap<String, Book>();
		map.put(new String ("开发"),new Book("java"));
		System.out.println(map.get(new String("开发")));
	}
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Map<String,Book> map = new HashMap<String, Book>();
		map.put("开发",new Book("java"));
		System.out.println(map.get("开发"));
	}
}

总结

  • Map集合保存数据更有利与查找,而Collection保存数据是为了输出
  • Map使用Iterator接口输出步骤:……
  • HashMap可以保存Null,Hashtable不可以保存null。
  • 可以不可以重复,一旦出现重复会覆盖原有内容(更新Key的Value值)

Stack子类

Stack 表示:栈操作;栈是一种先进后出的数据结构;而Stack是Vector的子类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Stack<E>
extends Vector<E>

需要注意:Stack虽是Vector子类,可是不会使用Vector方法。

Stack栈操作:
  • 入栈:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public E push(E item);
  • 出栈:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public E pop();
  • 实现入栈、出栈操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		Stack<String> all = new Stack<String>();
		all.push("A");
		all.push("B");
		all.push("C");
		all.push("D");
		System.out.println(all.pop());
		System.out.println(all.pop());
		System.out.println(all.pop());
		System.out.println(all.pop());
	}
}

如果栈中数据已经全部执行出栈而依旧继续执行出栈pop操作,则报错:空栈异常(栈中无数据则无法出栈执行操作)

Properties子类

Collections工具类

  • 向集合中追加一组数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static <T> boolean addAll(Collection<E> c,……);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TestDemo {
	public static void main(String [] args) {
		List<String> all = new ArrayList<String>();
		Collections.addAll(all, "A","B","C","D");
		System.out.println(all);
	}
}

Collections工具类是负责给集合操作接口Collection提供辅助的操作方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java集合综合面试题
面试题:现在在一个List集合之中保存了多个String对象,要求将这个List集合变为Set集合,而后再将这个Set集合之中的全部数据保存在Map集合的value里面,而Map集合的key使用UUID生成,最后将Map中的数据进行迭代输出。
葆宁
2019/04/18
7520
Java类集框架详细汇总
Java的类集框架比较多,也十分重要,在这里给出图解,可以理解为相应的继承关系,也可以当作重要知识点回顾;
BUG弄潮儿
2021/04/12
7280
类集框架(一)
在Collection中定义了15个方法,在所以的方法中,只有两个方法最为常用:add(),iterator().从开发来讲,很少直接使用Collection。
MaybeHC
2024/04/23
890
李兴华Java核心技术讲解--类集框架笔记
3.1、认识类集(理解) 如果现在要想保存多个对象,肯定使用对象数组完成,但是对象数组本身有一个最大的问题在于其数据的长度,所以后来使用了链表完成了动态对象数组的开发,可是链表的开发难度实在是很大,而且如果一个链表要想真正去使用,只依靠之前所编写的还不够,还需要进行一些代码的调优。 而在JDK 1.2之后正式引入了类集的概念,类集是一种动态的对象数组,属于各个数据结构的实现类,在整个类集之中主要的组成是一些核心的操作接口:Collection、List、Set、Map、Iterator、Enumeration。 3.2、单值保存的最大父接口:Collection(重点) 所谓的单值保存指的是每一次操作只会保存一个对象,就好像之前的链表程序一样,每一次只保存了一个对象,在Collection接口之中定义了如下的一些操作方法。 No. 方法名称 类型 描述 1 public boolean add(E e) 普通 数据增加 2 public void clear() 普通 清除数据 3 public boolean contains(Object o) 普通 查找数据是否存在 4 public boolean isEmpty() 普通 判断是否为空集合 5 public Iterator iterator() 普通 为Iterator接口实例化 6 public boolean remove(Object o) 普通 删除数据 7 public int size() 普通 取得集合的个数 8 public Object[] toArray() 普通 将集合变为对象数组 在Collection接口之中一共定义了15个方法,在所有的方法之中,只有两个方法最为常用:add()、iterator()。不过从开发上讲,很少会去直接使用Collection,都会使用Collection的两个子接口:List、Set。 3.3、允许重复的子接口:List(重点,80%) List是Collection的一个最为常用的子接口,首先这个接口的定义如下: public interface List extends Collection 但是List接口对Collection接口进行了大量的扩充,但是扩充之后的主要方法: No. 方法名称 类型 描述 1 public E get(int index) 普通 取得指定索引位置上的数据 2 public E set(int index, E element) 普通 修改指定索引位置上的数据 3 public ListIterator listIterator() 普通 为ListIterator接口实例化 但是以上的三个方法,只是针对于List接口起作用,而List接口有两个常用子类:ArrayList、Vector。 3.3.1、新的子类:ArrayList,95% ArrayList是List子接口使用最多的一个子类,而这个类的定义如下: public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable 按照面向对象的概念来讲,现在使用ArrayList主要的目的是为List接口实例化,所有的操作方法都以List接口为主。 范例:使用ArrayList进行List接口的功能验证 package cn.mldn.demo; import java.util.ArrayList; import java.util.List; public class TestDemo { public static void main(String[] args) throws Exception { List all = new ArrayList() ; all.add(“Hello”) ; all.add(“Hello”) ; // 内容重复了 all.add(“World”) ; for (int x = 0; x < all.size(); x++) { String str = all.get(x) ; // get()方法只有List接口有 System.out.print(str + “、”); } } } 在使用代码的时候可以发现,List集合之中即使存在了重复数据,也可以正常的保存,而且数据保存的顺序就是存入数据的顺序。 范例:使用List集合修改之前的程序 package cn.mldn.demo; import java.util.ArrayList; import java.util.List; interfac
葆宁
2019/04/18
6310
五、集合基础【黑马JavaSE笔记】
注:以上方法时List集合特有的方法,Collection集合没有这些方法,但是ArrayLIst集合有这些方法,因为ArrayList继承自List集合。
啵啵鱼
2022/11/23
7580
五、集合基础【黑马JavaSE笔记】
Java——类集框架:List集合接口的详解及应用举例
JDK1.2开始引入了类集框架的概念,Java中可以方便实现动态数组的操作,JDK1.5中泛型的出现,类集又避免了Object类对程序的影响。所有的类集开发类都保存在java.util包中。从JDK1.8中,类集支持了数据流的操作,支持MapReduce的操作。
Winter_world
2020/09/25
7910
Java——类集框架:List集合接口的详解及应用举例
Java基础——集合框架
  Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。Java平台的完整集合框架如下图所示:
mukekeheart
2018/02/27
7090
Java基础——集合框架
Java——类集框架:Map集合的详解及应用举例
Map保存的是二元偶对象,简单说就是两个值,key和value。使用中可以通过key查找到value数据,使用Map可以方便用户查询。
Winter_world
2020/09/25
8220
Java——类集框架:Map集合的详解及应用举例
Java基础(十九):集合框架
List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法
冬天vs不冷
2025/01/21
2450
Java基础(十九):集合框架
Java之集合的遍历与迭代器
集合的遍历 依次获取集合中的每一个元素 将集合转换成数组,遍历数组 //取出所有的学号, 迭代之后显示学号为1004-1009 Object[] c=map.keySet().toArray();//取出学号转换为数组 System.out.println(c); for (int i = 0; i < c.length; i++) { int n=(int)c[i];//数组向下转型 if(n>=1004&
二十三年蝉
2018/02/28
1K0
Java之集合初探(一)
一、集合概述、区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器。 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 数组和集合类同是容器,有何不同? A:长度区别   数组的长度固定   集合长度可变 B:内容不同   数组存储的是同一种类型的元素   而集合可以存储不同类型的元素 C:元素的数据类型问题   数组可以存储基本数据类型,也可以存储引用数据类型   集合只能存储引用类型 集合类
二十三年蝉
2018/02/27
9990
Java之集合初探(一)
杨校老师课堂之Java基础集合专题知识点整理
LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList 的特有方法即可。在开发时,LinkedList集合也可以作为堆栈。
杨校
2019/08/01
6410
Java笔记(3)
三种通用的遍历方式: 迭代器:在遍历的过程中需要删除元素,请使用迭代器。 增强for、Lambda: 仅仅想遍历,那么使用增强for或Lambda表达式
用户11062199
2024/05/31
890
Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器内的元素的遍历 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。   Java中的Iterator功能比较简单,并且只能单向移动:   (1) 使用方法iterator()要求容器返回一个Ite
二十三年蝉
2018/02/28
6770
Java当中的类集框架
类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中,我们主要学习的为三大类,分别是集合,列表和映射。
达达前端
2022/04/29
6100
Java当中的类集框架
Java-集合
哈喽!大家好,我是小简。今天开始学习《Java-集合》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!<有同样想法的小伙伴,可以联系我一起交流学习哦!>
小简
2023/01/04
1.2K0
Java-集合
Java Map集合的详解「建议收藏」
如果程序中存储了几百万个学生,而且经常需要使用学号来搜索某个学生,那么这个需求有效的数据结构就是Map。
全栈程序员站长
2022/09/02
7270
java笔记–Map的用法
我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。
全栈程序员站长
2022/09/17
8080
java笔记–Map的用法
Java集合
通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是!数组只能存放同一类型的数据,而且其长度是固定的,那怎么办了?集合便应运而生了。
用户10358987
2024/04/23
1070
巩固基础从Java集合类开始,最系统全面的集合类笔记
来源:https://blog.csdn.net/weizhengzhou520/article/details/81806539
挨踢小子部落阁
2019/07/16
4140
相关推荐
Java集合综合面试题
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 类集
    • Collection 接口*
      • 常用操作方法
    • List子接口
      • 常用操作
      • ArrayList子类
      • Vector子类(旧)
      • 总结:
    • Set 子接口
      • 数据排序问题
      • 重复元素问题
      • 总结:
    • 集合输出
      • Iterator*:迭代输出
      • ListIterator:双向迭代
      • Enumeration:枚举输出
      • foreach 输出
    • Map接口
      • 主要操作方法
      • 观察HashMap
      • 观察Hashtable
      • Iterator输出的问题(重点)
      • 利用Iterator实现Map接口的输出 *
      • Map集合中的Key
      • 总结
    • Stack子类
    • Properties子类
    • Collections工具类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档