一大波Java来袭(六)——Java集合之Collection和Iterator接口

本文主要介绍Collection和Iterator接口。

一、CollectionIterator接口

Collection接口是ListSet、、Queue的父接口。

Collection  c = new ArrayList();

          父类指向子类对象!优点:多态、动态链接、向上转型。

          面向接口编程,被调用者对于调用者是完全透明的,可以随意替换子类,屏蔽了子类特有的东西。

Demo:详细请参加:Java API文档

 

二、如何依次遍历集合中的元素?

              普通情况下,当我们把一个对象“丢进”集合后,集合会忘记改对象的数据类型,而默认为Object。 JDK1.5后,可以通过“泛型”限制并记住集合中元素的类型。

  1. Iterator迭代器
    1. 仅用于遍历集合
    2. 提供统一的访问接口
    3. 区别:Iterator用于访问对象,Collecton用于盛放对象

public class TestIterator {

	public static void main(String[] args) {
		Collection books = new HashSet();
		books.add("englishbook");
		books.add("computerbook");
		books.add("musicbook");
		
		Iterator booksIterator = books.iterator();
		
		while (booksIterator.hasNext()) {
			String book = (String) booksIterator.next();
			System.out.println("book:"+book);
			if (book.equals("computerbook")) {
				booksIterator.remove();
//				下面代码引发异常:ConcurrentModificationException
				books.remove(book);
			}
			book="just a test!";			
		}
		System.out.println(books);
	}
}

输出结果:


  1. foreach,用法简洁

public class TestForEach {

	public static void main(String[] args) {
		Collection books = new HashSet();
		books.add("englishbook");
		books.add("computerbook");
		books.add("musicbook");
		
		Iterator booksIterator = books.iterator();
		
		for (Object object : books) {
			String book = (String)object;
			System.out.println("book:" + book);
			if (book.equals("computerbook")) {
//				books.remove(book);
				book = "just a test!";
			}
		}
		System.out.println(books);
	}
}
输出结果

    三、比较两种遍历方式:

                  相同点:循环中的迭代访问集合元素时,系统只是把集合元素的值赋值给迭代变量。而集合本身不变

                  区别:

                                1.foreach更简洁

                                2.Iterator功能强大,在循环过程中可以对访问到的元素进行操作


    • 1
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 3
      评论
    本文将介绍如何使用World Wind Java SDK解析shape文件,并在地球上绘制出来。 第一步,需要下载Shapefile插件。Shapefile插件是World Wind Java SDK的一个扩展,它提供了对shape文件的支持。下载地址为:http://builds.worldwind.arc.nasa.gov/worldwind-releases/2.1.0/worldwind-shapefile-2.1.0.zip 第二步,将下载的压缩包解压到你的工程目录下,并将其中的worldwind-shapefile.jar文件添加到你的工程中。 第三步,创建一个ShapefileLayer对象,并指定shape文件的路径。例如: ShapefileLayer layer = new ShapefileLayer(); layer.setPath("path/to/your/shapefile.shp"); 第四步,将该layer添加到WorldWindow对象中。例如: worldWindow.getModel().getLayers().add(layer); 现在,你已经成功地在地球上绘制出了shape文件中的几何图形。 完整代码示例: ``` import gov.nasa.worldwind.BasicModel; import gov.nasa.worldwind.awt.WorldWindowGLCanvas; import gov.nasa.worldwind.geom.Position; import gov.nasa.worldwind.layers.RenderableLayer; import gov.nasa.worldwind.layers.ShapefileLayer; import gov.nasa.worldwind.render.*; import gov.nasa.worldwind.util.*; import javax.swing.*; import java.awt.*; import java.io.File; import java.util.*; public class ShapefileExample extends JFrame { public ShapefileExample() { WorldWindowGLCanvas wwd = new WorldWindowGLCanvas(); wwd.setPreferredSize(new Dimension(1000, 800)); this.getContentPane().add(wwd, BorderLayout.CENTER); this.pack(); WWUtil.alignComponent(null, this, AVKey.CENTER); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); // Set up a basic layer containing the shapefile ShapefileLayer layer = new ShapefileLayer(); layer.setPath("path/to/your/shapefile.shp"); // Set up a renderable layer to hold our labels RenderableLayer labelLayer = new RenderableLayer(); // Create a label for each shape in the shapefile for (ShapefileRecord record : layer.getRecords()) { // Get the shape's attributes Iterable<? extends Map.Entry<? extends String, ? extends Object>> attrs = record.getAttributes(); Iterator<? extends Map.Entry<? extends String, ? extends Object>> iterator = attrs.iterator(); String name = ""; while (iterator.hasNext()) { Map.Entry<? extends String, ? extends Object> attr = iterator.next(); if ("name".equalsIgnoreCase(attr.getKey())) { name = attr.getValue().toString(); break; } } // Create a label for the shape Shapefile shape = record.getShape(); if (shape instanceof Polyline) { Polyline polyline = (Polyline) shape; Position position = polyline.getStartPosition(); Polygon polygon = new Polygon(polyline.getPositions()); labelLayer.addRenderable(new SurfacePolyline(polygon, 5)); labelLayer.addRenderable(new SurfaceText(name, position)); } else if (shape instanceof Polygon) { Polygon polygon = (Polygon) shape; Position position = polygon.getCentroid(); labelLayer.addRenderable(new SurfacePolygon(polygon)); labelLayer.addRenderable(new SurfaceText(name, position)); } } // Add the layers to the WorldWindow wwd.getModel().getLayers().add(layer); wwd.getModel().getLayers().add(labelLayer); wwd.getModel().setGlobe(new Earth()); wwd.getModel().setView(new BasicOrbitView()); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new ShapefileExample(); } }); } } ```

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值