導航:首頁 > 操作系統 > 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相關的資料

熱點內容
連漲啟動源碼 瀏覽:161
小奔運動app網路異常怎麼回事 瀏覽:449
php開啟壓縮 瀏覽:305
伺服器主機如何設置啟動 瀏覽:284
linux配置網路命令 瀏覽:774
一張照片怎麼製作視頻app 瀏覽:908
pythonweb和php 瀏覽:978
電腦伺服器地址ip地址 瀏覽:823
對矩陣壓縮是為了 瀏覽:912
setfacl命令 瀏覽:172
linux子系統中斷 瀏覽:342
linux查看進程ps 瀏覽:224
知識庫系統php 瀏覽:625
小波變換壓縮圖像python 瀏覽:153
阿里巴巴程序員怎麼月入百萬 瀏覽:175
如何使用國外伺服器 瀏覽:188
燃燈者pdf 瀏覽:470
編譯器用數學嗎 瀏覽:9
圖形化apk反編譯工具 瀏覽:48
考勤表加密怎麼辦 瀏覽:739