(7)Java中的容器

1.Java中容器可以说成是“容纳其他对象的对象”吗?

对。容器自己也是对象,同时可以装其它对象的引用。


2.Collection/Set/List的联系与区别?

(1)Collection是Java集合顶级接口。

(2)List接口和Set接口是Collections接口的两个子接口。

(3)List接口存储一组不唯一,有序(插入顺序)的对象;

        Set接口存储一组唯一,无序的对象。


3.Set和List的特点和区别?

●List:①是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访问List中的元素,类似于Java中的数组;

           ②凡事可以操作索引的方法都是List接口特有方法。

●Set:①存储一组唯一、无序的对象,(存入和取出的顺序不一定一致);

           ②操作数据的方法与List相似,Set接口不存在与索引相关的方法。


4.列举Collection接口中的常用方法。

add(Object obj)添加。(存储的是对象的引用)
size()容器中元素的实际个数。
remove(Object obj)删除一个元素。

removeAll(Collection c)

删除与集合c中的元素相同的元素。
retainAll(Collection c)只保留当前集合(调用此方法的集合)与集合c(此方法中的参数)中相同的元素。
contains(Object obj)判断集合中是否存在元素obj。
isEmpty()判断集合是否为空。
Iterator()生成此集合的迭代器。

5.使用泛型的好处?
    泛型是从javaSE 1.5开始提出来的,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Java语言引入泛型的好处就是安全简单。


6.写出List、Set、Map中使用泛型的例子。
ArrayList<String> aList = new ArrayList<String>(); //只能接受String类型的对象
Set<Integer> set = new HashSet<Integer>(); //只能接收Integer类型的对象
Map<Integer,String> map = new Map<Integer,String>(); //只能接收key类型为Integer,value类型为String 

7.写出遍历List的三种方式。
public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("a");
    list.add("c");
		 
    final int SIZE = list.size();
    //1.普通for循环
    for(int i=0; i<SIZE; i++) {
        String s = list.get(i);
	System.out.print(s);
    }
    System.out.println();
    //2.增强for循环
    for(String s1 : list) {
	System.out.print(s1);
    }
    //3.Iterator遍历
    System.out.println();
    Iterator<String> it = list.iterator();
    while(it.hasNext()) {
	String s = it.next();
	System.out.print(s);
    }
}

8.写出两种遍历Set的方式。
public static void main(String[] args) {
    Set<Integer> set = new HashSet<>();
    set.add(12);
    set.add(56);
    set.add(12);
    Iterator<Integer> iterator = set.iterator();

    //1.增强for循环遍历
    for(Integer integer : set) {
	System.out.print(integer.intValue()+" ");
    }
    System.out.println();
    
    //2.Iterator遍历
    while(iterator.hasNext()) {
	System.out.print(iterator.next().intValue()+" ");
    }
}



9.采用增强for循环遍历List或Set,若List或Set没有加泛型,能遍历吗?

可以。


10.Iterator是接口还是类?在遍历元素时想删除元素,用哪种遍历方式好一些?

Iterator是接口。遍历时采用Iterator中的remove方法可以移除元素。


11.Collection和Collections的区别?

Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。

Collections是Java中的类,专门用来操作集合类,它还提供了一系列静态方法实现对各种集合的搜索、排序线程安全化等操作。


12.写代码遍历map。
public static void main(String[] args) {
		Map<String,String> map = new HashMap<>();
		map.put("a", "A");
		map.put("b", "A");
		map.put("a", "A");
		map.put("b", "B");
		
		//1.得到所有的key
		Set<String> set = map.keySet();
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()) {
			String key = iterator.next();
			System.out.println(key+"-->"+map.get(key));
		}
		System.out.println();
		
		//2.得到所有的value
		Collection<String> collection = map.values();
		for(String string : collection) {
			System.out.println("value-->"+string);
		}
		System.out.println();
		
 		//3.得到所有的key和value
		Set<Entry<String,String>> entries = map.entrySet();
		Iterator<Entry<String,String>> iterator2 = entries.iterator();
		while(iterator2.hasNext()) {
			Entry<String,String> entry = iterator2.next();
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"-->"+value);
		}
		
	}


13.使用entrySet方法遍历Map。
public static void main(String[] args) {
		Map<String,String> map = new HashMap<>();
		map.put("a", "A");
		map.put("b", "B");
		
		Set<Entry<String,String>> entries = map.entrySet();
		Iterator<Entry<String,String>> iterator2 = entries.iterator();
		while(iterator2.hasNext()) {
			Entry<String,String> entry = iterator2.next();
			String key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"-->"+value);
		}
	}


14.在src下创建有如下内容的资源文件fruit.properties,尝试使用Property类读取里面的属性。

apple=name:apple,place:ShangDong,price:7.00RMB/500g
orange=name:orange,place:YiChang,price:5.99RMB/500g
banana=name:banana,place:HaiNan,price:3.50RMB/500g
pear=name:pear,place:YiChang,price:3.00RMB/500g

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class TestProperties {

	public static void main(String[] args) throws IOException {
		File file = new File("fruit.properties");//参数是文件路径
		InputStream is = new FileInputStream(file);//建立此文件的输入流
		
		Properties p = new Properties();//创建文件资源对象
		p.load(is);//加载资源文件
		String fruitInfo = p.getProperty("orange");//getProperty()的参数是资源文件的key值
		System.out.println(fruitInfo);//fruitInfo是通过输入的key值获取value即水果信息

	}

}

15.Vector和ArrayList的联系与区别

实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用。

区别如下:

    ①Vector是早期JDK接口;ArrayList是替代Vector的新接口

    ②Vector是线程安全的;ArrayList是线程不安全的,重速度轻安全

    ③Vector在长度需增加时,Vector默认增长一倍;ArrayList增长50%


16.资源文件有什么用?

资源文件是用来配置信息的,如数据库信息,键值对信息等。程序里需要有个方法来读取资源文件里的配置信息。如果没有资源文件,配置信息就得写在代码里,一旦信息变化了要修改,就不得不去修改代码。有了资源文件之后,一旦信息要修改,修改资源文件就可以,不用修改代码,更好的保证了代码的封装性。


17.HashTable与HashMap的联系与区别

实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用

两者区别如下:

    ①Hashtable是早期jdk提供的接口;HashMap是后来提供的接口

    ②Hashtable继承了Dictionary类;HashMap实现Map接口

    ③Hashtable线程安全,HashMap线程非安全

    ④Hashtable不允许null值,HashMap允许null值


18.Java主要容器的选择依据和应用场合

(1)HashTable、Vector类是同步的,而HashMap、ArrayList是不同步的。因此在多线程的情况下,应使用HashTable和Vector,反之使用HashMap、ArrayList。

(2)除需要排序时使用TreeSet、TreeMap外,都应使用HashSet、HashMap,因为HashSet、HashMap效率更高。

(3)ArrayList由数组构建,LinkList由双向链表构建,因此在程序经常添加、删除元素时速度更快,最好使用LinkList;而其他情况下最好使用ArrayList,,因为它提供了更快的随机访问元素的方法。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值