《码出高效:Java开发手册》学习笔记(一)数组与集合

  数组与集合都是用来存储对象的容器,前者性质单一,方便易用;后者类型安全,功能强大,且两者之间必然有相互转化的方式。毕竟他们性格迥异,在转换过程中,如果不注意转换背后的实现方式,很容易产生意料之外的问题。转换分成两种情况:数组转集合和集合转数组。

1、数组转集合

  在数组转集合的过程中,注意是否使用了视图方式直接放回数组中的数据。我们以 Arrays.asList() 为例,它把数组转换成集合时,不能使用其修改集合相关的方法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。实例源码如下:

public class ArrayAsList {
    public static void main(String[] args) {
        String[] stringArray = new String[3];
        stringArray[0] = "one";
        stringArray[1] = "two";
        stringArray[2] = "three";

        List<String> stringList = Arrays.asList(stringArray);
        // 修改转换后的集合,成功地将第一个元素"one"改成"oneList"
        stringList.set(0,"oneList");
        // 运行结果是"oneList",数组的值随之更改
        System.out.println(stringArray[0]);

        // 这是重点:以下三行编译正确,但都会跑抛出运行时异常
        stringList.add("four");
        stringList.remove(2);
        stringList.clear();
    }
}

  事实证明,可以通过set方法修改元素的值,原有数组相应位置的值同时也会被修改,但是不能进行修改元素的任何操作,否则均会抛出 UnsupportedOperationException 异常。 Arrays.asList 体现的是适配器模式,后台的数据仍是原数组, set() 方法即间接对数组进行值的修改操作。 asList 的返回对象是一个 Array 的内部类,它并没有实现集合个数的相关修改方法,这也正是抛出异常的原因。

2、集合转数组

  相对于数组转集合来说,集合转数组更加可控,毕竟是从相对自由的集合容器转为更加苛刻的数组。什么情况下集合需要转成数组呢?适配别人的接口,或者进行局部方法计算等。先看一个源码,猜猜执行结果:

public class ListToArray {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(3);
        list.add("one");
        list.add("two");
        list.add("three");

        // 范型丢失,无法使用String[]接收无参方法返回的结果(第1处)
        Object array1 = list.toArray();

        // array2数组长度小于元素个数(第2处)
        String[] array2 = new String[2];
        list.toArray(array2);
        System.out.println(Arrays.asList(array2));

        // array3数组长度等于元素个数(第3处)
        String[] array3 = new String[3];
        list.toArray(array3);
        System.out.println(Arrays.asList(array3));
    }
}

执行结果如下:
[null,null]
[one,two,three]
  第1处比较容易理解,不要用 toArray() 无参方法把集合转换成数组,这样会导致范型丢失;在第2处与第3处的区别在于即将复制进去的数组容量是否足够。如果容量不够,则弃用此数组,另起炉灶。

资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值