容器的打印

本例子介绍了一些基本类型的容器的打印,看如下一段代码:

package access;
import java.util.*;
public class PrintingContainers {
	static Collection fill(Collection<String> collection){
		collection.add("rat");
		collection.add("cat");
		collection.add("dog");
		collection.add("dog");
		return collection;
	}
	static Map fill(Map<String,String> map){
		map.put("rat", "Fuzzy");
		map.put("cat", "Rags");
		map.put("dog", "Bosco");
		map.put("dog", "Spot");
		return map;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(fill(new ArrayList<String>()));
		System.out.println(fill(new LinkedList<String>()));
		System.out.println(fill(new HashSet<String>()));
		System.out.println(fill(new TreeSet<String>()));
		System.out.println(fill(new LinkedHashSet<String>()));
		System.out.println(fill(new HashMap<String,String>()));
		System.out.println(fill(new TreeMap<String,String>()));
		System.out.println(fill(new LinkedHashMap<String,String>()));
		
	}

}
此程序的输出结果为:


上述例子展示了JAVA容器库中两大基本类型,它们的区别在于容器中每个“槽”保存的元素个数。

Collection在每个槽中保存一个元素。此类容器包括List:以特定的顺序保存一组元素;Set:元素不能重复;Queue:只允许在容器的一段插入元素,并在另一段移除元素。而Map在槽中保存了两个元素,键和与键相关的值。

此程序的输出结果调用的是容器提供的默认打印方法,也就是默认的toString方法,生成了直观的输出结果:

Collection打印出来的内容用[]扩住,内部元素间用“,”分割。

Map打印出来的内容用{}扩住,键与值用“=”连接。

第一个fill方法作用于所有类型的Collection,实现了用来添加新元素的add方法。

ArrayList和LinkedList同属于List类型,从输出来看,二者均按照被插入的顺序来保存元素。不同之处在于执行某种类型操作时的性能,LinkedList的方法多于ArrayList。

HashSet、TreeSet和LinkedHashSet均属于Set类型,输出显示在Set中,每个相同的项只保存一次,不同的Set存储元素的方式不同。HashSet采用十分复杂的方式来存储,这种技术是最快获得元素的方式;TreeSet按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象。

Map使我们可以用键来查找元素,就像一个简易数据库一样,对于每一个键来说,Map只接受存储一次。Map.put方法将增加一个键值对,在使用的过程中我们也并不需要考虑Map的尺寸,因为该容器可以自动调整尺寸,并且知道如何打印自己,显示相关联的键和值,键值对在Map中的保存顺序并非按照插入顺序。HashMap采用相当快速的算法来控制顺序,它也提供了最快的查找技术,没有按照任何明显的顺序来排列元素;而LinkedHashMap按照插入顺序保存元素的同时保留了HashMap的查询速度。

使用IoC(Inversion of Control,控制反转)容器打印 "Hello IOC" 的例子通常是在Spring框架中演示的,因为Spring是一个强大的IoC容器。假设你有一个简单的配置: ```java // 定义一个接口 interface GreetingService { void sayHello(); } // 实现这个接口的类 class SimpleGreetingService implements GreetingService { @Override public void sayHello() { System.out.println("Hello from SimpleGreetingService"); } } // IoC容器(如Spring)管理的对象 @Component public class GreetingController { private GreetingService greetingService; // 使用@Autowired注解自动注入服务 @Autowired public GreetingController(GreetingService service) { this.greetingService = service; } public void printGreeting() { greetingService.sayHello(); // 这里会打印 "Hello from SimpleGreetingService" } } ``` 在这个例子中,`GreetingController`不直接创建`SimpleGreetingService`实例,而是通过Spring容器负责创建并注入。当调用`printGreeting()`方法时,Spring会动态地提供正确的实现。 关于使用Map和Set实现依赖注入,这通常是手动管理依赖的一种场景,而不是IoC容器的方式。例如,你可以创建一个Map来存储各种类型的GreetingService: ```java // 创建Map来保存服务 Map<String, GreetingService> services = new HashMap<>(); services.put("simple", new SimpleGreetingService()); // 获取需要的服务 String type = "simple"; GreetingService service = services.get(type); service.sayHello(); // 手动选择并调用对应的sayHello方法 ``` 至于Set,它可以帮助管理和排序单例类型的依赖,但这通常不是依赖注入的核心目的。在IoC上下文中,依赖项通常会作为构造函数参数或字段注入,而非存储在集合中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值