导航:首页 > 操作系统 > android深拷贝list

android深拷贝list

发布时间:2023-01-08 03:13:45

⑴ 安卓开发如何将List赋值给另一个List

1. 使用new关键词创建对象。
2.通过jdk中提供的工厂方法返回对象。如String str = String.vlaueOf("test");
3.通过反射机制。最经常使用的则是JDBC: String driver = "com.mysql.jdbc.Driver";Class.forName(driver);
4.通过类的clone()方法。
5.通过反序列化手段。

android怎么取出list里面特定的数据

只需要循环一下,判断即可。

示例代码:
1.遍历整个list集合
for(int i=0; i<list.size(); i++){
}
2.在for循环中增加判断代码
if(list.get(i).equals("指定")){}

3.得到每一个item进行判断即可。

⑶ android 怎么取list数据

按以下代码可获取到list数据:
package com.example.sdtg.sdsw;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ListActivity extends Activity {

// 命名空间
// String nameSpace = "http://tempuri.org/";
// 调用的方法名称
// String methodName = "GetSjSearch";
// EndPoint
// String endPoint = "http://192.168.0.145/webservice2/gswebservice.asmx";
// SOAP Action
// String soapAction = "http://tempuri.org/GetSjSearch";
// List<Map<String, Object>> mList;
ListView ListV;

HashMap<String, Object> map = new HashMap<String, Object>();
private List<Map<String,String>> listItems;
SimpleAdapter mListAdapter;
String name="";
String addr="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);

listItems = new ArrayList<Map<String,String>>();
ListV=(ListView)findViewById(R.id.ListView01);
Handler indicate = new Handler();
//获取主页面传的值
final Intent data = getIntent();
name=data.getStringExtra("Name");
addr=data.getStringExtra("Addr");
new NetAsyncTask().execute();

ListV.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
//获得选中项的HashMap对象
TextView viewtmc = (TextView) arg1.findViewById(R.id.textListmc);
TextView viewdz = (TextView) arg1.findViewById(R.id.textlistdz);
TextView viewid = (TextView) arg1.findViewById(R.id.textlistid);
//String playerChanged = c.getText().toString();
Bundle bundle = new Bundle();
bundle.putString("Name", viewtmc.getText().toString());
bundle.putString("Addr", viewdz.getText().toString());
bundle.putString("ID", viewid.getText().toString());
final Intent data = getIntent();
data.putExtras(bundle);
//跳转回MainActivity
//注意下面的RESULT_OK常量要与回传接收的Activity中onActivityResult()方法一致
ListActivity.this.setResult(RESULT_OK, data);
//关闭当前activity
ListActivity.this.finish();
}

});

};

class NetAsyncTask extends AsyncTask<Object, Object, String> {

@Override
protected void onPostExecute(String result) {
if (result.equals("success")) {

mListAdapter = null;
mListAdapter = new SimpleAdapter(ListActivity.this, listItems, R.layout.item,new String[]{"title", "info", "img"}, new int[]{R.id.textListmc, R.id.textlistdz, R.id.textlistid});
ListV.setAdapter(mListAdapter);
}
super.onPostExecute(result);
}

@Override
protected String doInBackground(Object... params) {
// 命名空间
String nameSpace = "http://tempuri.org/";
// 调用的方法名称
String methodName = "GetSjSearch";
// EndPoint
String endPoint = "http://192.168.0.145/webservice2/gswebservice.asmx";
// SOAP Action
String soapAction = "http://tempuri.org/GetSjSearch";

// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);

// 设置需调用WebService接口需要传入的两个参数mobileCode、userId
rpc.addProperty("name", name);
rpc.addProperty("address", addr);

// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);

envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);

HttpTransportSE transport = new HttpTransportSE(endPoint);
try {
// 调用WebService
transport.call(soapAction, envelope);
} catch (Exception e) {
e.printStackTrace();
}

SoapObject object;
// 开始调用远程方法
try {
object = (SoapObject) envelope.getResponse();
int count = object.getPropertyCount();
// 得到服务器传回的数据
int count1 = object.getPropertyCount();
if(count1>0)
{
for (int i = 0; i < count1; i++) {
Map<String,String> listItem = new HashMap<String, String>();
SoapObject soapProvince = (SoapObject)object.getProperty(i);
listItem.put("title", soapProvince.getProperty("DJXX_NSRMC").toString());
listItem.put("info", soapProvince.getProperty("DJXX_ZCDJ").toString());
//listItem.put("img", soapProvince.getProperty("DJXX_NSRSBH").toString());
listItems.add(listItem);
}}
} catch (IOException e) {
e.printStackTrace();
//return "IOException";
}
return "success";
}
}

}

⑷ android如何将从sqlite中取出的一列数据放进list

我在写IOS下的程序,对sqlite来说应该是一样的,ANDROID下语法稍有差别。
先定义数据库并打开
sqlite3 *database;
const char *databasefilename;
sqlite3_open(databasefilename, &database);
然后定义一个select语句
const char *selectFromA = "select a from tablename";
sqlite3_stmt *statement;
打开
sqlite3_prepare_v2(database, selectFromA, -1, &statement, nil);
while(sqlite3_step(statement) == SQLITE_ROW)
{
char *a_char = (char *)sqlite3_column_text(statement, 0)
}
a_char就是char型的数据库列内容,此外还有
sqlite3_column_double,sqlite_column_int等等。

⑸ android 怎么在activity之间传递List 类型的数据

Intent 传值可以传递对象,但是比较麻烦,要序列化

给你一种建议,将这个List转成JSON字符串

另外一个Activity再将这个字符串返序列即可

JSON与java对象相互转换google提供了一个非常牛X的工具Gson

用法非常简单,一行代码搞定


⑹ 深拷贝和浅拷贝的区别

1、浅拷贝可以使用列表自带的()函数(如list.()),或者使用模块的()函数。深拷贝只能使用模块的deep(),所以使用前要导入:from import deep。


2、 如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。

3、 如果拷贝的对象里的元素包含引用(像一个列表里储存着另一个列表,存的就是另一个列表的引用),那浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份。

但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。

⑺ list addall是深拷贝吗

public boolean addAll(Collection<? extends E> c)按照指定 Collection 的迭代器所返回的元素顺序,将该 Collection 中的所有元素追加到此列表的尾部。如果正在进行此操作时修改指定的
Collection,那么此操作的行为是不明确的。(这意味着如果指定的 Collection 是此列表且此列表是非空的,那么此调用的行为是不明确的。)

API的信息,希望能帮到你

⑻ 实现list的深拷贝

这时,获取source.get(0)的name值,也变成了“CDE”。
为了解决这个问题,使得改变中的值,不影响source中的数据,则要进行深拷贝。
即,对A类实现clone()方法:

然后,

就可以进行深拷贝了。

在此,再多描述一下关于Clone的内容。
Java对对象和基本数据类型的处理是不一样的。在Java中用对象作为入口参数的传递则缺省为“引用传递”,也就是说仅仅传递了对象的一个“引用”,这个引用的概念与C语言中的指针引用是一样的。当函数体内部对这个变量进行改变时,实质上就是对这个对象进行直接操作。
除此之外,在任何用“=”向对象变量赋值的时候都是“引用传递”。

一、当Class A的成员变量类型是基本数据类型(外加String类型)时,只要实现如上简单的clone(称影子clone)就可以。但是如果Class A的成员变量是数组或者更复杂类型时,就必须实现深度clone。

此处的A的成员变量String[],影子clone对name数组clone他们的地址,需进行深拷贝。

二、需要注意的是,Class A存在更为复杂的成员变量时,如Vector等存储对象地址的容器时,就必须clone彻底。

⑼ 赋值、浅拷贝、深拷贝区别

1.赋值
a = 1
print(id(a))
b = a
print(id(b))
a = 2
print(id(a))
print(id(b))
输出结果为:
258226432
258226432
258226448
258226432
通过输出结果我们可以发现,当给变量a赋值1时,python会首先给值1划分一定空间存放这个值,这个值1的id为258226432,然后将a指向该空间,再将a赋值给b的时候,b也指向了该空间。再将2赋值给a时,首先会划分一个空间存放2的值,再将a指向2所在的空间,而此时b的值不变。

2.浅拷贝
语法:.
import
list1 = [1,2,[3,4]]
print(id(list1))
print(id(list1[2]))

list2 = list1[:]
print(list2)
print(id(list2))
print(id(list2[2]))

list3 = .(list1)
print(list3)
print(id(list3))
print(id(list3[2]))

list1[2].append(5)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
print(list3)
print(id(list3))
print(id(list3[2]))

list1.append(6)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
print(list3)
print(id(list3))
print(id(list3[2]))
输出结果为:
10368824
10367904
[1, 2, [3, 4]]
10833592
10367904
[1, 2, [3, 4]]
10833792
10367904
[1, 2, [3, 4, 5]]
10368824
10367904
[1, 2, [3, 4, 5]]
10833592
10367904
[1, 2, [3, 4, 5]]
10833792
10367904
[1, 2, [3, 4, 5], 6]
10368824
10367904
[1, 2, [3, 4, 5]]
10833592
10367904
[1, 2, [3, 4, 5]]
10833792
10367904
通过对比可以发现,浅拷贝只会拷贝第一层地址,深层地址不会拷贝,当深层地址随内容改变而改变的时候,浅拷贝的内容也会随之改变。

3.深拷贝
语法:.deep
import
list1 = [1,2,[3,4]]
print(list1)
print(id(list1))
print(id(list1[2]))

list2 = .deep(list1)
print(list2)
print(id(list2))
print(id(list2[2]))

list2[2].append(5)
print(list1)
print(id(list1))
print(id(list1[2]))
print(list2)
print(id(list2))
print(id(list2[2]))
输出结果为:
[1, 2, [3, 4]]
13186872
13185992
[1, 2, [3, 4]]
13651680
13651880
[1, 2, [3, 4]]
13186872
13185992
[1, 2, [3, 4, 5]]
13651680
13651880
通过输出结果可知,当使用深拷贝的时候,深层地址也会被拷贝,改变内嵌列表的内容,原本列表的内容不会改变。

⑽ android怎么传一个list集合

方法1: 直接让User类继承Serializable或者Parcelable接口即可,Intent只可以传输序列化的对象<pre t="code" l="java">//User类
public class User implements Serializable{
private String name;
.
}

//直接加入intent
List<User> list = new ArrayList<User>();
Intent intent = new Intent();
intent.putExtra("list",list);
方法2: 把list集合转为字符串表示,可以使用json格式,直接用Gson框架转换即可,再到另一个activity转换回来<pre t="code" l="java">List<User> list = new ArrayList<User>();
Type type = new TypeToken<ArrayList<User>()>(){}.getType();
String json = new Gson().toJson(list,type);
intent.putExtra("list",json);

//转换回List<User>
String json = getIntent.getStringExtra("list");
Type type = new TypeToken<ArrayList<User>()>(){}.getType();
List<User> list = new Gson().fromJson(json,type);

阅读全文

与android深拷贝list相关的资料

热点内容
未来最值得投资的加密货币 浏览:526
ascii码是编译的时候用吗 浏览:779
压缩机感应包可以通用吗 浏览:410
方舟服务器怎么发布到搜索列表 浏览:270
xml防反编译 浏览:239
数据传输加密系统技术方案 浏览:842
程序员没有准备去面试 浏览:4
51单片机usb鼠标 浏览:879
qq服务器的ip地址查询 浏览:112
java仿qq聊天 浏览:400
解压的ipa重新打包 浏览:142
程序员那么可爱vip版 浏览:239
程序员怎么升职 浏览:243
图形化命令按钮vb 浏览:987
vcu盘加密怎么设置 浏览:414
如何加密备份微信聊天记录 浏览:529
安卓手机如何模拟键盘 浏览:932
查看dns地址命令 浏览:768
android录屏工具 浏览:842
成都互动直播系统源码 浏览:956