我找到了搜索列表中项目的最快方法。正如我在Python中发现的那样,最好使用 @Override
protected final void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabSwitcher = (TabSwitcher) findViewById(R.id.tab_switcher);
ViewCompat.setOnApplyWindowInsetsListener(tabSwitcher, createWindowInsetsListener());
tabSwitcher.setDecorator(new Decorator());
tabSwitcher.addListener(this);
tabSwitcher.showToolbars(true);
tabSwitcher
.setToolbarNavigationIcon(R.drawable.ic_add_box_white_24dp, createAddTabListener());
tabSwitcher.inflateToolbarMenu(R.menu.tab_switcher, createToolbarMenuListener());
tabSwitcher.getViewTreeObserver()
.addOnGlobalLayoutListener(createTabSwitcherLayoutListener());
for (int i = 0; i < TAB_COUNT; i++) {
tabSwitcher.addTab(createTab(i));
}
}
@NonNull
private Tab createTab(final int index) {
CharSequence title = getString(R.string.tab_title, index + 1);
Tab tab = new Tab(title);
Bundle parameters = new Bundle();
parameters.putInt(VIEW_TYPE_EXTRA, index);
tab.setParameters(parameters);
return tab;
}
private class Decorator extends TabSwitcherDecorator {
@NonNull
@Override
public View onInflateView(@NonNull final LayoutInflater inflater,
@Nullable final ViewGroup parent, final int viewType) {
View view;
view = inflater.inflate(R.layout.tab_edit_text, parent, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
toolbar.inflateMenu(R.menu.tab);
toolbar.setOnMenuItemClickListener(createToolbarMenuListener());
Menu menu = toolbar.getMenu();
TabSwitcher.setupWithMenu(tabSwitcher, menu, createTabSwitcherButtonListener());
return view;
}
@Override
public void onShowTab(@NonNull final Context context,
@NonNull final TabSwitcher tabSwitcher, @NonNull final View view,
@NonNull final Tab tab, final int index, final int viewType,
@Nullable final Bundle savedInstanceState) {
TextView textView = findViewById(android.R.id.title);
textView.setText(tab.getTitle());
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setVisibility(tabSwitcher.isSwitcherShown() ? View.GONE : View.VISIBLE);
Button bnt = findViewById(R.id.button1);
if (viewType != 0) {
EditText editText = findViewById(android.R.id.edit);
editText.requestFocus();
}
EditText editText = findViewById(android.R.id.edit);
if(TextUtils.isEmpty(editText.getText())) {
bnt.setOnClickListener(new View.OnClickListener()
{
WebView web1;
EditText editText = findViewById(android.R.id.edit);
public void onClick(final View view) {
String Address = "https://www.google.com/search?q=" + editText.getText().toString();
web1 = (WebView) findViewById(R.id.webview);
WebSettings webSetting = web1.getSettings();
webSetting.setBuiltInZoomControls(true);
webSetting.setJavaScriptEnabled(true);
web1.setWebViewClient(new WebViewClient());
web1.loadUrl(Address);
}
});
}else{
WebView web1;
;
web1 = (WebView) findViewById(R.id.webview);
String webUrl = web1.getUrl();
editText.setText(webUrl);
WebSettings webSetting = web1.getSettings();
webSetting.setBuiltInZoomControls(true);
webSetting.setJavaScriptEnabled(true);
web1.setWebViewClient(new WebViewClient());
web1.loadUrl(webUrl);
}
}
public class WebViewClient extends android.webkit.WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);
EditText editText = (EditText) findViewById(android.R.id.edit);
editText.setText(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
}
来搜索项而不是使用set
。所以我将list
替换为list
。但是,set
中的所有项都是对象。我想搜索是否有对象id等于我想要找到的id。如果是,则返回该对象。
我可以在一个简单的for循环中完成它,但我不知道如果我仍然循环所有元素来找到该项,它如何在set中得到改进。
set
答案 0 :(得分:1)
使用 python的设置,您可以在其中分配 ID
d = { id, id2, id3, .. idN }
然后您可以简单地声明if id in d
来验证元素是否在集合中(不重复它)。
这个工作的原因是因为python中的Set
实现像dict没有值(哈希表)。这为您提供了 O(1)的会员资格检查。
s = set([1, 2, 3, 4, 5])
if 1 in s:
print 'in!' # in! is printed
从此answer拍摄(感谢 @ juanpa.arrivillaga )
CPython的集合实现为具有虚拟值的字典(键是集合的成员),以及利用这种缺乏值的一些优化
或者,另一种选择是使用已排序的集合。 (使用Set
无法完成此操作,因此要么实现SortedSet
类,要么使用list
对象)
一种快速搜索算法是二进制搜索。 (bisect module)
您可以在>>之后使用此算法对系列进行排序。
答案 1 :(得分:1)
下面总结了如何使用python dictionary作为示例。
def find(allItems, id):
return allItems[id]
def addItem(allItems, item):
allItems[item['id']] = item
# create a python dictionary called `allItems`
allItems = {}
# add some items to the dictionary
item1 = { 'id': 1, 'name': 'James' }
item2 = { 'id': 2, 'name': 'Susan' }
addItem(allItems, item1)
addItem(allItems, item2)
# now lookup an item by its id
result = find(allItems, 1)
print result['name'] # ==> 'James'
作为文档explains,当您想要按其ID 查找项时,词典很好。
与由一系列数字索引的序列不同,词典由键索引 ...字典上的主要操作是存储带有某个键的值并提取给定键的值
这意味着如果您知道项目的“密钥” - 即项目的ID,您可以立即找到该项目。无需使用for
循环。