java集合基础

本文详细介绍了Java中各种集合框架的特性与用法,包括List、Set、Map等,探讨了它们在数据结构应用中的重要性。通过具体代码示例展示了如何使用这些集合来解决实际问题,同时对比了不同集合的性能差异。此外,文章还涉及了数据结构的基础知识,如链表、哈希表等,并讨论了它们在现代编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<pre name="code" class="java"><span style="font-size:18px;">public class MainClasss {

	public static void main(String[] args) {
		
		// 泛型占位符上限约束
		List<? extends String> list = new ArrayList<String>();
		// list.add(""); // 编译错误, 不能把String类型添加至未知类型的集合
		test(list);
		
		// 无序,元素不能重复,判断元素相同的标准就是equals方法返回true和hashCode方法相同(地址相同)
		Set set = new HashSet<Object>();
		set.add(new ClassA());
		set.add(new ClassA());
		set.add(new ClassB());
		set.add(new ClassB());
		set.add(new ClassC());
		set.add(new ClassC());
		Iterator iterator = set.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}

		// TreeSet实现于SortedSet接口, 里面的元素处于排序状态
		TreeSet<String> treeSet;
		
		// 使用双向链表,是有序的,也就是以插入的顺序保存
		LinkedHashSet linkedHashSet = new LinkedHashSet<String>();
		
		// string对象的equals方法是根据两个对象的值判断是否相等的
		System.out.println(new String("aaa").equals(new String("aaa")));
		
		List<String> lists = new ArrayList<String>();
		lists.add("1");
		lists.add("2");
		lists.add("3");
		lists.add("4");
		
		// List提供了一个遍历的对象,与Iterator不同的是ListIterator提供了向前迭代的方法
		ListIterator<String> listIterator = lists.listIterator();
		
		// vector继承于List,是线程安全的
		Vector vector;
		
		// Arrays的asList方法得到的是它内部类的List,只能遍历,不支持增加删除操作。
		String[] str = new String[]{"a", "b", "c"};
		List<String> list2 = Arrays.asList(str);
		// list2.add("d"); // 不支持添加删除操作
		
		// LinkedList支持双向队列、栈、list的操作,相比List,对插入删除操作效率比较高
		LinkedList linkedList = new LinkedList<String>();
		
		/*
		 * List和LinkedList遍历性能比较,按说LinkedList性能应该比List好,但是测试结果恰恰相反。
		 * 也许数据太少,有待进一步测试
		 * */
		String[] test = new String[900000];
		for (int i = 0; i < test.length; i++) {
			test[i] = String.valueOf(i);
		}
		List<String> listTest = new ArrayList<String>();
		for (int i = 0; i < test.length; i++) {
			listTest.add(test[i]);
		}
		LinkedList<String> linkedListTest = new LinkedList<String>();
		for (int i = 0; i < test.length; i++) {
			linkedListTest.add(test[i]);
		}
		Iterator it = listTest.iterator();
		long start = System.currentTimeMillis();
		while (it.hasNext()) {
			it.next();
		}
		System.out.println("List迭代花费时间:" + (System.currentTimeMillis() - start));
		
		Iterator it1 = linkedListTest.iterator();
		long start1 = System.currentTimeMillis();
		while (it1.hasNext()) {
			it1.next();
		}
		System.out.println("LinkedList迭代花费时间:" + (System.currentTimeMillis() - start1));
		
		// HashMap是无序的。重写了toString方法,也是无序的,HashTable是线程安全的
		Map<String, String> map = new HashMap<String, String>();
		map.put("key1", "1");
		map.put("key2", "2");
		map.put("key3", "3");
		map.put("key4", "4");
		map.put("key5", "5");
		map.put("key6", "6");
		map.put("key7", "7");
		map.put("key8", "8");
		map.put("key9", "9");
		System.out.println("HashMap是无序的");
		for (String strs : map.keySet()) {
			System.out.println(map.get(strs));
		}
		
		/*
		 * LinkedHashMap处于排序结构,和LinkedList和LinkedHashSet一样,
		 * 都是采用链表的结构
		 * */
		LinkedHashMap linkedHashMap = new LinkedHashMap<String, String>();
		linkedHashMap.put("key1", "1");
		linkedHashMap.put("key2", "2");
		linkedHashMap.put("key3", "3");
		linkedHashMap.put("key4", "4");
		linkedHashMap.put("key5", "5");
		linkedHashMap.put("key6", "6");
		linkedHashMap.put("key7", "7");
		linkedHashMap.put("key8", "8");
		linkedHashMap.put("key9", "9");
		System.out.println("LinkedHashMap是有序的");
		for (Object strs : linkedHashMap.keySet()) {
			System.out.println(map.get(strs));
		}
	}
	
	public static void test(List<?> list) {
		
	}
}</span>



<span style="font-size:18px;">/*
 * 重写equals方法,总是返回true
 */
public class ClassA {

    @Override
    public boolean equals(Object obj) {
        return true;
    }
    
    @Override
    public int hashCode() {
        return super.hashCode();
    }
}</span>

<span style="font-size:18px;">/*
 * 重写hashCode方法,总是返回1
 */
public class ClassB {

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }
    
    @Override
    public int hashCode() {
        return 1;
    }
}</span>


<span style="font-size:18px;">/*
 * 重写equals方法,总是返回true,重写haahCode方法,总是返回2
 */
public class ClassC {

	@Override
	public boolean equals(Object obj) {
		return true;
	}
	
	@Override
	public int hashCode() {
		return 2;
	}
}</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霍师傅hgd613

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值